排查linux下java應用cpu占用過高


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

PS,如何操作可以參見@bluedavy《分布式Java應用》的【5.1.1 CPU消耗分析】一節,說得很詳細:

  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. 查看對應的線程棧,分析問題

查問題時,會要多次上面的操作以分析確定問題,這個過程太繁瑣太慢了。

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM