排查CPU占比持续高方法
CPU占比持续高
1.分析哪个线程耗用CPU(看程序哪块逻辑消耗CPU)
找到Java进程pid:jcmd
监控Java进程状态:java -jar opt/arthas/arthas-boot.jar 7
进入后执行thread命令 查看TOP n 线程 ,返回的第一列未线程ID
/# thread
执行thread线程ID 查看线程堆栈,了解该线程正在执行什么代码,进而得知程序是在干什么比较耗用CPU
/# thread ID
CPU占比比较高时大多数情况都是GC线程耗用CPU,这时一般是程序有内存泄露问题,需要分析GC情况,若不是GC线程耗CPU,则可以根据线程堆栈了解程序时干什么事情很消耗CPU,可让研发结合实际运行情况分析原因(可在arthas中执行stop命令退出arthas命令)
2.分析内存GC问题(在K8s容器中执行的,非arthas里面)
总结垃圾回收统计
/# jstat -gcutil 7 5000
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
若FGC,FGCT增加的较快但持久化内存占用降低的很少,且总体呈上升趋势说明内存有泄露,需进一步分析内存中的对象,具体是什么对象持续增长
查看内存中对象信息写入到文件中
jmap -histo:live 进程pid > 输出文件名
/# jmap -histo:live 7 > dump4.txt
/# more dump4.txt
以上结果中展示了Java内存中各个对象的数量及占用的内存大小,持续跟踪多次,找到持续上涨的可疑对象,结合代码逻辑就可以分析出大概的问题代码块。
__EOF__
作 者:程序员洋洋洋洋
出 处:https://www.cnblogs.com/DataoJava/p/14858441.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)