我們服務器上的的服務和項目大部分都是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