记一次CPU占用率较高问题排查

如题所述

在项目开发调试过程中,我们遇到了服务组件CPU占用率较高的问题。在64G内存、24核CPU的Linux环境下,服务组件在无数据处理情况下,CPU占用率维持在20-30%,引起关注。


我们首先分析可能的原因,结合实际场景,判断可能是代码中有耗CPU的操作。接下来,我们分步骤进行排查:




    获取进程ID




    查找CPU使用率较高的线程,发现三个线程ID分别为6132、10852、17016。




    使用ps命令获取线程详细信息,输出至jstack.txt文件便于观察。




    转换操作系统线程ID为16进制,定位到堆栈信息中线程ID=17F4。




    定位到异常代码在UploadRunner类的run()方法内,while(true)循环获取阻塞队列元素进行消费。使用的是非阻塞方式poll()方法,导致线程自旋。




排查发现,当前有三个线程在自旋空转,导致CPU占用率持续较高。调整为使用queue.take()方法,让消费线程阻塞获取元素。


验证结果,CPU占用率稳定在0%-1%之间,问题得到解决。


通过分析JDK BlockingQueue阻塞队列的实现方式,了解到调用take()方法后,队列为空时线程会被阻塞等待,从而避免了CPU资源的大量占用。


总结,通过仔细分析jvm运行原理、运用系统命令和排查工具,我们可以有效地定位和解决此类问题。面对复杂情况,关键在于深入理解原理并灵活应用工具。

温馨提示:内容为网友见解,仅供参考
无其他回答

记一次CPU占用率较高问题排查
我们首先分析可能的原因,结合实际场景,判断可能是代码中有耗CPU的操作。接下来,我们分步骤进行排查:获取进程ID 查找CPU使用率较高的线程,发现三个线程ID分别为6132、10852、17016。使用ps命令获取线程详细信息,输出至jstack.txt文件便于观察。转换操作系统线程ID为16进制,定位到堆栈信息中线程ID=17F4。

CPU占用100%排查过程
首先,使用top命令确定CPU使用率最高的进程ID(PID),发现PID为15913。添加-H选项后,能进一步查看该进程的线程信息,结果显示最消耗CPU资源的两个线程ID分别为15924和15925,对应的十六进制表示为0x3E34和0x3E35。jstack命令帮助收集线程堆栈信息,通过分析这些信息,能够深入探究可能存在的Java程序问题,...

记一次FGC事件和解决
首先,我登录服务器(CentOS 7),利用top和uptime工具,发现罪魁祸首正是Java进程,其CPU占用率高达100%,严重妨碍了后续服务的正常运行。接着,我调整了负载均衡策略,将问题服务器从集群中移除,减缓压力。接着,通过jps命令找到了异常的Tomcat进程PID,假设为10086。进一步使用jstat -gcutil分析内存使用情况...

2020-06-22 记一次ES占用CPU异常高的问题处理
确实发现每隔几秒钟就GC一次!看了默认2G的堆内存需要调高些了。鉴于服务器空余内存不多,就先加1GB上去看看效果。重启后过3分钟看 top -d 1 ,ES 的CPU占用果然正常多了。

记一次linux挖矿处理过程(kthreaddi)
开始问题排查,第一步,我回顾了以往处理类似问题的经验。尽管这是个人研究项目,但我决定记录下这次排查过程,希望对他人有所帮助。第二步,尝试从进程角度着手。我查阅了服务器的运行进程,发现一个名为kthreaddi的进程CPU占用率极高。这引起了我的注意,因为kthreaddi是Linux内核的一个守护进程,通常情况...

mysql cpu 100%干到0.3%,记一次优化全过程
首先,运维团队迅速采取措施,如扩大机器配置并重启MySQL,同时研发团队也开始排查问题并制定优化策略。幸运的是,这些基础操作初步缓解了问题。进一步分析后,发现MySQL的CPU瓶颈主要源于慢查询。其中,1、2类查询占总耗时的99%,分析后推测是慢查询导致的CPU飙升。聚焦在一条典型公告消息表的查询上,初步...

记录一次gitlab占用cpu过高问题处理方法
研发最近反应gitlab特别慢,经常502。在ci的时候比乌龟还慢 登录服务器查看好家伙cpu飚到200多 不多说查看服务器日志 提示pgsql索引损坏,导致cpu暴涨,想着修复索引就完事,没想到无效 解决办法 注意操作之前一定要备份好数据

CPU占用过高,不知道怎么回事
可以通过更换正确的驱动程序来解决此问题。9、如果CPU温度过高,特别是在炎热夏季,极易造成CPU资源占用率大而出现死机的现象。一可能是风扇坏了,二可能是超频加上天气炎热造成CPU温度过高,此时需要更换风扇或不超频等,总之就是让CPU温度恢复正常。

一次Tomcat CPU占用忽高忽低的排查记录
CentOS 7 apache-tomcat-8.0.28 用 top 命令查看系统资源暂用情况,发现CPU暂用忽高忽低(一会占用1%一会又飙升至40~80%)

cpu使用记录一直非常高怎么办 机子好慢的
单击avi视频 文件后CPU占用率高是因为系统要先扫描该文件,并检查文件所有部分,并建立索引;解决办法:右击保存视频文件的文件夹-属性-常规-高级,去掉为了快速搜索,允许索引服务编制该文件夹的索引的勾。 CPU占用100%案例分析 1、 dllhost进程造成CPU使用率占用100% 特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗...

相似回答
大家正在搜