用於快速排查Java
的CPU
性能問題(top us
值太高),自動查出運行的Java
進程中消耗CPU
多的線程,並打印出其線程棧,從而肯定致使性能問題的方法調用。
目前只支持Linux
。緣由是Mac
、Windows
的ps
命令不支持列出進程的線程id
,更多信息參見#33,歡迎提供解法。java
PS,如何操做能夠參見@bluedavy的《分佈式Java應用》的【5.1.1 CPU
消耗分析】一節,說得很詳細:git
top
命令找出消耗CPU
高的Java
進程及其線程id
:
top -H
,或是打開top
後按H
)CPU
使用率排序(top
缺省是按CPU
使用降序,已經合要求;打開top
後按P
能夠顯式指定按CPU
使用降序)Java
進程id
及其CPU
高的線程id
CPU
高的線程棧:
id
做爲參數,jstack
出有問題的Java
進程id
成十六進制(能夠用printf %x 1234
)jstack
輸出中查找十六進制的線程id
(能夠用vim
的查找功能/0x1234
,或是grep 0x1234 -A 20
)查問題時,會要屢次上面的操做以分析肯定問題,這個過程太繁瑣太慢了。github
轉自:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threadsvim