我们服务器上的的服务和项目大部分都是JAVA的,现在来讲讲,这种服务器cpu100%如何定位。
- 先使用top命令找到cpu最高的进程。比如找到cpu最高的进程id,简称top_pid。
- 使用top -Hp top_pid找到cpu最多的线程,这里记住最高的几个线程id,thread_id。
- 现在我们将这些线程id转化成16进制,因为java堆栈里的线程id都是16进制的,转化后方便我们定位printf “%xn” thread_id
- jstack top_pid,打印出堆栈,然后用3步骤里找到的十六进制线程id,找到对应的堆栈
上面的方法是可以帮我们定位出问题,但是4个步骤还是太麻烦,我们也可以使用一些比较方便工具简化定位。
- 使用工具show-busy-java-threads.sh
show-busy-java-threads.sh(https://github.com/oldratlee/useful-scripts)
- 使用arthas
https://alibaba.github.io/arthas/index.html