排查高CPU使用率的方法

  1. 使用top命令查找在大量占用CPU的进程的PID
  2. 使用ps -mp pid -o THREAD,tid,time定位到大量占用CPU的线程TID;也可以用这个命令直接排序下,更方便找到大量占用CPU的线程:ps -mp pid -o THREAD,tid,time|uniq -c|sort -nr
  3. 将上述找到的线程TID转换成十六进制:printf “%x\n” TID,比如原本的线程TID是28802,可以用上面的命令转成十六进制数7082
  4. 使用PID以及刚刚转成十六进制的TID来打印出该线程的堆栈信息:jstack PID|grep TID -A 100。也可以把完整的堆栈信息输入到一个log文件里,有两种方法:
    1. 方法一是用kill -3 PID > threadDump.log 2>&1,这种方法不适用于JDK1.6以上的版本
    2. 方法二是用jstack -l PID > threadDump.log 2>&1
  5. 接下来就是分析堆栈信息,定位到问题代码的位置了。

下面简单介绍下上述命令的几个关键参数的含义:

ps命令:
-m 显示所有的执行者。
-p 指定进程的PID,并列出该进程的状况。
-o 用户自定义输出格式。

unic命令:
-c 检查文件是否已经按照顺序排序,排序过为真

sort命令:
-n 按照数值大小进行排序
-r 以相反的顺序进行排序,即降序排序,从大排到小

jstack命令:
-l long listing. Prints additional information about locks,会打印出额外的锁信息,可以在发生死锁时用来观察锁持有情况
-m to print both java and native frames (mixed mode),不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

kill命令:
-signal 指定发送的信号类型,比如:
-3是打印进程的线程信息,并不会终止进程;
-9是强制杀死进程,一般用于立即杀死无响应或者卡死的进程;
-15是柔和地终止进程,一般会在终止之前保存数据、关闭连接,需要经过一段时间后才会完全退出进程,效果等同于-TERM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值