Linux CPU高负载分析

步骤一、找到最耗CPU的进程
工具:top
方法:
执行top -c ,显示进程运行信息列表
键入P (大写p),进程按照CPU使用率排序

步骤二:找到最耗CPU的线程
工具:top
方法:
top -Hp 10765 ,显示一个进程的线程运行信息列表
键入P (大写p),线程按照CPU使用率排序

步骤三:将线程PID转化为16进制
工具:printf
方法:printf %x 10804
#之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。

步骤四:查看堆栈,找到线程在干嘛
打印进程堆栈
通过线程id,过滤得到线程堆栈
工具:pstack/jstack/grep

方法:jstack 10765 | grep 2a34 -C5 --color

linux下查找java进程占用CPU过高原因

1. 查找进程
top查看进程占用资源情况

 
2.查找线程
使用top -H -p <pid>查看线程占用情况
#或使用ps -mp pid -o THREAD,tid,time |head 100
#head默认显示前10行,看全部就去掉head参数

3.查找java的堆栈信息
将线程id转换成十六进制
#printf %x 18354
#3d30
 
然后再使用jstack查询线程的堆栈信息
语法:jstack <pid> | grep -a 线程id十六进制
#jstack 【进程ID PID】 | grep 【线程ID十六进制】 -A 10 -B 10
#-A 10 -B 10展示前后10行便于排查

jstack 17739 | grep -a 47b2
 
这样就找出了有问题的代码了。
 
剩下的就是分析原因和修改代码了。


 

猜你喜欢

转载自blog.csdn.net/Doudou_Mylove/article/details/108336521