排查linux下java應用cpu佔用太高

用於快速排查JavaCPU性能問題(top us值太高),自動查出運行的Java進程中消耗CPU多的線程,並打印出其線程棧,從而肯定致使性能問題的方法調用。
目前只支持Linux。緣由是MacWindowsps命令不支持列出進程的線程id,更多信息參見#33,歡迎提供解法。java

PS,如何操做能夠參見@bluedavy《分佈式Java應用》的【5.1.1 CPU消耗分析】一節,說得很詳細:git

  1. top命令找出消耗CPU高的Java進程及其線程id
    1. 開啓線程顯示模式(top -H,或是打開top後按H
    2. CPU使用率排序(top缺省是按CPU使用降序,已經合要求;打開top後按P能夠顯式指定按CPU使用降序)
    3. 記下Java進程id及其CPU高的線程id
  2. 查看消耗CPU高的線程棧:
    1. 用進程id做爲參數,jstack出有問題的Java進程
    2. 手動轉換線程id成十六進制(能夠用printf %x 1234
    3. jstack輸出中查找十六進制的線程id(能夠用vim的查找功能/0x1234,或是grep 0x1234 -A 20
  3. 查看對應的線程棧,分析問題

查問題時,會要屢次上面的操做以分析肯定問題,這個過程太繁瑣太慢了。github

 

 

轉自:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threadsvim

相關文章
相關標籤/搜索