Java项目占用服务器CPU资源过大排查

1:通过top命令查询占用CPU过大的进程,假设找到的占用CPU最大的线程的PID为 1000

命令:top

2:查询项目

命令1>列出所有的java项目以及占用的PID进程号        jps -l

命令2>ps -ef | grep 【进程ID(通过top命令找到的占用进程高的PID)】

3:把栈堆信息打印或生成文件

打印栈堆信息>        jstack 【进程ID(通过top命令找到的占用进程高的PID)】

导出栈堆信息>        jstack 【进程ID(通过top命令找到的占用进程高的PID)】 > 【文件名称】

 4:查询线程种占用高的线程的PID ,假设找到的为PID分别为1001 1002

命令> top -Hp 【线程PID(如上top找到的1000)】

5:把4中找到的线程的PID分别转换成16进制(如上的1001 和 1002 转换后分别为 3e9 和 3ea)然后去3中打印或者生成的文件中搜索 ,可以通过命令转换

命令> printf '%x' 【要转换的内容】

 6:通过以上搜索就可以知道哪个线程在执行哪些方法导致CPU占用过高了(查看执行的方法找到对应的代码检查)

7:当显示为GC导致的(如下图)则需要进一步判断哪些原因导致疯狂的GC,一般情况下为一些对象占用(通常要考虑的是线程)

 8:我们可以通过计算每次GC使用的情况,这个时候可以通过jstat命令统计

命令> jstat -gc 【进程的ID】 【每次统计时间的毫秒值大小】 【统计次数】

 计算方式为:(下一个FGC - 上一个FGC)=这段时间内的GC数

                        (下一个FGCT - 上一个FGCT)=这段时间内的GC耗时

通过以上的方式可以确定是否是GC耗时占用过多的CPU了

9:接下来就是找出问题,可以通过jmap命令打印出这个进程里面对象的占用的空间情况

全部占用情况查找命令> jmap -histo 【进程的PID(步骤一中找到的)】

部分占用情况查找命令> jsmp -histo 【进程的PID(步骤一中找到的)】 | head -【显示的前几个的数量】

 通过以上的方式就可以基本确定大部分的CPU内存占用过高的情况了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值