Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CPU占用率100%的解决方法

CPU占用率100%的解决方法

原创
作者头像
用户3148533
修改于 2018-09-05 09:28:02
修改于 2018-09-05 09:28:02
3.2K0
举报
文章被收录于专栏:解决发现解决发现

原因:

代码语言:txt
AI代码解释
复制
   建立连接后启动新的线程,如果线程中有简单粗暴的不含阻塞的while(1)循环,会持续占用CPU,导致CPU占用率极高。

解决:

代码语言:txt
AI代码解释
复制
   在while(1)的大循环中插入一句sleep(1),即阻塞1毫秒,java线程内则使用Thread.sleep()的静态方法阻塞线程。效果奇佳如图(用C语言演示)

图:优化前(我的电脑是四核cpu,所以单线程无限无阻塞循环占用率不会达到100%)

图:优化后

分析:

代码语言:txt
AI代码解释
复制
   这个问题几乎有可能出现在所有持续运作的程序上。虽然只是阻塞了程序一毫秒,但是如果循环内的运算量不大的话,阻塞一毫秒几乎让出了整个CPU的运算资源,还不影响程序的运行。理想情况下,假设原本执行一次循环只需要消耗10个CPU周期的话,如果不进行阻塞,2Ghz的CPU在一秒内会执行2*10^9/10=2*10^8次的循环,然而在1秒内执行那么多次循环对我们的程序一点帮助都没有,还会抢占CPU资源;而阻塞该程序1ms后,相当于每进行一次循环后就让出1ms的运算资源,也就是让出2*10^6个cpu周期,原本占用100%的程序只会占用不到1万次CPU周期,这对于2Ghz的CPU来说几乎是0负担的。以前我混过ACM竞赛,往往敲的代码都是追求指定的时间内完成大规模数据的运算,所以,在while循环中是绝对不可能出现sleep()这种拖时间的代码的,然而,程序在实际应用中,一个小小的sleep()还是必不可少的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Android 8.0以后CPU使用率的方案研究
由于Android 8.0以后Google的权限限制,SDK再也拿不到进程CPU的实时占用率,只能拿到自己本身进程的Jiffies,而由于拿不到系统整体Jiffies的情况下,就没办法衡量CPU当前的消耗状况了,也没办法根据当前CPU状态实时做一些策略调整。因此进行深入研究以后,给出Android 8.0以后判断CPU状态的几个参考方案(非标准答案)。 方案1 - 通过单位时间汇编指令数获取CPU频率 (1)基础概念: 1)Jiffies 全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动
腾讯移动品质中心TMQ
2019/05/16
14.6K3
Android 8.0以后CPU使用率的方案研究
【Java】服务CPU占用率100%,教你用jstack排查定位
jstack 就像是给你的Java 程序做的一次“体检”,特别是检查程序里的“线程”是否健康。
JavaDog程序狗
2024/09/24
6600
【Java】服务CPU占用率100%,教你用jstack排查定位
解决打开IDEA 对 CPU占用率巨大的问题
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/04/06
4.2K0
解决打开IDEA 对 CPU占用率巨大的问题
如何让while(true)循环降低CPU占用率问题?
只要在死循环中增加sleep即可。 <?php while(true){//CPU占用率高 //TODO } while(true){//改进后降低CPU占用率 //TODO
友儿
2022/09/11
2.9K0
redis实例cpu占用率过高问题优化(下)
架构问题,其实早在报表高峰期读取问题出现的初期,大数据的同事就提出增加redis从库实例,做负载均衡的想法了。鉴于redis是单线程模型,只能用到一个cpu核心,多增加几个实例可以多利用到几个cpu核心这个想法确实也没错。当时由于从库物理机有富余的内存资源,所以临时新增了三个从库实例,并添加haproxy轮询访问后端4个redis实例。整体架构变为1主4从+haproxy做从库负载均衡。但是我始终认为,cpu高主要还是跟具体的业务查询有关,架构扩展应该是在单实例优化到最佳之后才考虑的。这就好比在mysql当中,有大量慢查询导致cpu过高,你光靠扩展从库而不去先优化SQL,扩展到什么时候是个头呢?
陈不成i
2021/05/21
1.8K0
(十一)sleep(1)、sleep(0)和sleep(1000)的区别
操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,Windows属于抢占式。
HaC
2020/12/30
7.2K0
Tomcat性能优化,学会薪水翻倍
tomcat是我们在web开发过程中会用到的servlet容器,同时也是springBoot内置集成默认的容器
公众号 IT老哥
2020/09/24
9840
Tomcat性能优化,学会薪水翻倍
系统调用解释,同步和互斥,操作系统原理(时间片,抢占式),Thread.Sleep作用,Thread.sleep 的Thread是指的当前所在的线程,Thread.Sleep(0)的作用
由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。
zhangjiqun
2024/12/16
1160
高性能:7-可用于CPU分析的BPF工具【bpf performance tools读书笔记】
下表的这些工具有些是属于BCC或者bpftrace,或为这本书创建的。一些工具同时出现在BCC和bpftrace中。下表出了本节介绍的工具的来源(BT是bpftrace的缩写。)
保持热爱奔赴山海
2020/03/06
5.5K0
高性能:7-可用于CPU分析的BPF工具【bpf performance tools读书笔记】
Java--五态模型&控制线程
上一篇----线程的创建和启动 五态模型:在线程的生命周期中,有五种状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。 新建和就绪态: 当程序使用new关键字创建一个线程后,该线程就处于新建状态;当调用start()方法后,该线程就处于就绪态。 启用线程使用start()方法,不能使用run()方法!如果直接调用run()方法,系统把线程对象当作普通对象,run()方法当作普通方法而不是线程执行体。 只能对处于就绪态的线程调用start(
SuperHeroes
2018/05/22
9670
闲鱼一面:Thread.sleep(0) 到底有什么用?
点击关注公众号,Java干货及时送达 来源:www.cnblogs.com/keyyang/p/4128424.html 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒? 某人的代码中用了一句看似莫明其妙的话:Thread.Sl
Java技术栈
2022/05/25
3380
闲鱼一面:Thread.sleep(0) 到底有什么用?
深入理解MySQL中的CPU自旋锁及其调优实践
前一段时间针对 MySQL 使用 TPC-C 导入10000仓的数据,查看数据库性能指标发现 TPS 3-4w/s (不符合预期),伴随 CPU idle 特别比较高, sys CPU 比较低,CPU 在空跑。于是乎做了基本的诊断 :os系统调用栈 , MySQL 系统参数 。使用 perf top 工具观察 系统函数调用情况, ut_delay比较突出。
用户1278550
2024/04/24
6314
深入理解MySQL中的CPU自旋锁及其调优实践
Thread.sleep(0) 到底有什么用?
我们可能经常会用到 Thread.Sleep 函数来吧使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?
良月柒
2020/11/23
8350
Thread.sleep(0) 到底有什么用?
全志Tina平台查看CPU和DDR占用率的方法
在进行产品调试的时候,我们有时候需要看看demo/算法/应用占用了多少的cpu和ddr。
阿志小管家
2024/02/02
3190
全志Tina平台查看CPU和DDR占用率的方法
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8%
会跳舞的机器人
2018/09/21
2.2K0
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
在 Android 运行时 , 进入某界面后 , 退出界面 , CPU 占用率泄漏 12 % , 某个线程没有退出 , 一直在后台运行 ;
韩曙亮
2023/03/29
4990
【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
面试官:Thread.sleep(0) 有什么用?
我们可能经常会用到 Thread.Sleep 函数来吧使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?
路人甲Java
2020/07/28
2.5K0
多线程-概述及底层实现机制浅析
在打算写这篇多线层底层实现机制的时候,突然发现自己对于计算机竟然懂得这么表面,对于CPU的工作原理都不完全清楚,于是又转头查看了一些CPU相关的资料。也不敢钻的太深,怕自己迷路...,其中如有错误,望知道的朋友在下面留言评论,我会及时更新的。
進无尽
2018/09/12
1.2K0
多线程-概述及底层实现机制浅析
CPU load 高占用率低问题的排查
# 1. 引言 突然观察到服务器 load 过高,可是 CPU 占用率很低。 这也算是一个常见问题了。 那么,如何排查和解决这个问题呢?
用户3147702
2022/06/27
4.9K1
CPU load 高占用率低问题的排查
漫画:什么是SnowFlake算法?
UUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一识别码。
用户5927304
2019/07/31
1.1K0
推荐阅读
相关推荐
Android 8.0以后CPU使用率的方案研究
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档