java项目cpu或内存过高,排查问题思路

一、cpu过高

1、通过top命令,定位进程ID

通过top命令,查看CPU使用率最高得进程ID,记为@pid

2、通过韩参数得top查看cpu过高线程

命令 top -H -p [@pid],记录结果得pid值,记为@tpid

3、通过printf 打印上述值得十六进制

命令 printf 'ox%x\n' [@tpid],记录结果为@tid

4、jstack命令查看线性具体信息

命令jstack [@pid] | grep [@tid] ,可以查看线程具体信息,再进行详细定位

二、内存过高

1、top查看较高得进程

top命令可以查看cpu,内存等信息,记录进程ID为@pid

2、jstat查看垃圾回收情况

命令jstat -gc [@pid] 1000 查看GC情况,1000表示1秒刷新一次

S0C:第一个幸存区的大小,单位KB。
S1C:第二个幸存区的大小。
S0U:第一个幸存区的使用大小。
S1U:第二个幸存区的使用大小。
EC:伊甸园区的大小。
EU:伊甸园区的使用大小。
OC:老年代大小。
OU:老年代使用大小。
MC:方法区大小(元空间)。
MU:方法区使用大小。
CCSC:压缩类空间大小。
CCSU:压缩类空间使用大小。
YGC:年轻代垃圾回收次数。
YGCT:年轻代垃圾回收消耗时间,单位s。
FGC:老年代垃圾回收次数。
FGCT:老年代垃圾回收消耗时间,单位s。
GCT:垃圾回收消耗总时间,单位s。

如果gc频繁,每次回收内存空间也正常,那么说明是因为对象创建过快导致内存一直占用很高;如果每次回收的内存非常少,那么有可能是因为内存泄漏导致内存一直无法被回收。

3、jmap查看对象占用内存情况

命令jmap -histo [@pid] | head 20查看前20个大对象

4、jmap到处dump文件

如果第三步查不出来,可以将dump文件导出,并通过visualVM 工具打开分析,命令 jmap -dump:live,file=/home/my.hprof导出dump文件

欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

posted @ 2024-04-01 23:59  东方欲晓_莫道君行早  阅读(195)  评论(0编辑  收藏  举报