关闭页面特效

排查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
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   程序员洋洋洋洋  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示