如何查询进程中占用CPU的线程
如何查询进程中占用CPU的线程
-
top -c 命令查找进程PID
-
top -Hp PID 找进程中的线程号
1. 查找进程
top查看进程占用资源情况
明显看出java的两个进程22714,12406占用过高cpu.
2.查找线程
使用top -H -p <pid>查看线程占用情况
3.查找java的堆栈信息
将线程id转换成十六进制
#printf "%x\n" 15664
#3d30
然后再使用jstack查询线程的堆栈信息
语法:jstack <pid> | grep -a 线程id(十六进制)
jstack <pid> | grep -a 3d30
这样就找出了有问题的代码了。
剩下的就是分析原因和修改代码了
inux下java程序占用CPU和内存过高排错处理方案
广告关闭
11.11 智慧上云
云服务器企业新用户优先购,享双11同等价格
1:通过jps命令查看所有进程pid。
2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和内存以及负载情况
如图:
使用top -p pid -H 查看针对每一个线程占用CPU情况进行查询
如果你发现某一个PID占用的CPU过高,就拿到这个PID转换成16进制
例如pid为12760转化成16进制31D8,大写换成小写
jstack 22821|grep -A 10 0x31d8
针对你的每个线程拿出占用CPU的堆栈信息,你可以根据这个去查找CPU的占用
如果你的内存占用较高,我比较喜欢使用jmap命令
jmap -histo:live 9652 | head -n 100
jmap -heap 12733
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
附加:
route add -net 42.120.0.0/16 gw 131.146.100.1 dev eth4