java 程序占满 CPU
596人浏览 / 0人评论
参考
一种CPU占用过高的故障定位分析方法_莫叫石榴姐的博客-CSDN博客
https://blog.csdn.net/qq_33129875/article/details/129283010
https://blog.csdn.net/kx3005320013/article/details/127121812
使用 Arthas
官网:https://arthas.aliyun.com/doc/
其他
方式一
操作:
# 查看进程 pid
top
# ps -ef 或者jps进一步定位得知其具体的后台应用程序名字
ps -ef | grep pid | grep -v grep
jps -l
# 定位具体的线程ID( -m:显示所有的线程;-p:pid进程使用CPU的时间;-o:该参数后是用户自定义格式)
ps -mp pid -o THREAD,tid,time
# 定位具体的应用程序代码位置
# 将需要的线程ID转换成16进制格式
printf "%x\n" pid
jstack pid | grep 十六进制的pid -A60
# 然后定位到 nid=0x十六进制的pid 位置
方式二
操作:
# 查看进程 pid
top
# 进程中的 CPU 占用情况
top -Hp 2619002
# 将需要的线程ID转换成16进制格式
printf "%x\n" pid
# 使用 jstack 获取线程快照并输出到某个文件中
jstack -l 16进制pid> 16进制pid.txt
# 强制输出
jstack -F -l 16进制pid> 16进制pid.txt
参数:
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
-l | 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 |
全部评论