Java服务运行时CPU飙升问题排查

25 篇文章 1 订阅
15 篇文章 0 订阅

一、前言

  服务器上某个服务CPU异常告警,CPU使用率飙升到几十百分百,甚至达到百分之几百。

二、排查步骤

1、top命令查看进程

  执行:top -c ,显示进程运行信息列表。然后键入P (大写p),进程按照CPU使用率排序。找到CPU消耗最高的进程,记录进程的id(PID)。
在这里插入图片描述

2、找到进程中消耗最高的线程

  执行:top -Hp 进程id 命令(小写p),查看java进程下的所有线程占CPU的情况。记录CPU消耗最高的线程id(PID)。

top -Hp 2077

3、线程PID转为十六进制

  将十进制的线程PID转为十六进制的数值,方法有多种。这里介绍2种:
  1)printf命令
  在服务器上执行: printf “%x\n” 线程PID,可得到对应数字的十六进制。

printf "%x\n" 621

在这里插入图片描述
  2)计算器

4、查看线程在干嘛

  使用jstack工具执行:jstack 进程ID | grep 线程ID(十六进制),查看线程的堆栈信息。然后根据堆栈信息查看对应代码即可。

jstack 2077 | grep 26d

5、进一步分析

  第4步骤中,如果打印出的线程带有"VM Thread",说明是GC线程。此时有可能是频繁服务GC操作导致。
  1)jmap查看内存使用情况
   执行: -heap 进程ID,在线查看各年代内存使用情况
  2)导出dump日志
   执行:jmap -dump:format=b,file=filename 进程ID,下载到本地,通过IDE可以打开,分析各类型对象创建情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值