实战如何从线上程序查找出cpu过高的原因 (有问题的代码)?
1. TOP
首先查看系统资源占用信息,TOP看一下
从这里可以查找cpu占用过高的 进程号 比如 第一个java进程 63959
2. 怎么通过进程号 查找这个进程中的线程信息呢?
可以ps --help指令查查,我是百度搜的
2.1 ps -mp [进程ID PID] -o THREAD,tid,time
2.2 找到耗时cpu最高的线程id 这里是查看的我们生产应用,其实无问题
假如是 63793这个线程,占用cpu时间1个小时10分钟
2.3 通过printf "%x\n" 63973 可以将线程id转化为16进制表示, f9e5
2.4 打印线程的堆栈信息
jstack pid |grep tid (16进制表示) -A 30
2.5 一般从上面的堆栈信息里就能找出有问题的代码了
看看代码是否有死循环或死锁导致的cpu飙高