如何查询进程中占用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
 
 
posted @ 2019-10-21 13:44  dulingyulove  阅读(1282)  评论(0编辑  收藏  举报