线上CPU占用100% 问题 快速定位

1.top查看 CPU占用最高的java进程

2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。

  • 如果报错

Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

解决方法:用 printf "%x" pID 转16 进制 就可以了,printf "%x" 26250 结果是:668a

jstack 0x668a >> java.txt
执行后继续报错,原因是本次排查的是es的故障,又因为es的进程只能用es创建的专门的用户才能启动... 所以用root账号执行Jstack去观察es的进程是不行的,如果你的场景不是这种,可以无视

java.rmi.UnknownHostException: Unknown host: 0x1899; nested exception is
这个报错的原因和上面一样,为什么报这个错,因为直接运行不了jstack,我采用了arthas 也是因为这个原因用不了
target process not responding or HotSpot VM not loaded

[参考](https://blog.csdn.net/u013467442/article/details/88957485)

3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。

4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。(不行用电脑的计算器转换也可以)

5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。

6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。

posted @ 2022-06-22 11:37  方东信  阅读(409)  评论(0编辑  收藏  举报