編碼的世界 / 優質文選 / 生物

linux下cpu過高問題排查


2022年1月07日
-   

 在服務器報cpu過高時,可使用以下命令,快速導出堆棧信息,以方便查看具體的問題。
1. 使用top命令定位異常進程。可以看見12836的CPU和內存占用率都非常高

此時可以再執行ps -ef | grep java,查看所有的java進程,在結果中找到進程號為12836的進程,即可查看是哪個應用占用的該進程。
2. 使用top -H -p 進程號查看異常線程

3. 使用printf "%x
" 線程號將異常線程號轉化為16進制

4. 使用jstack 進程號|grep 16進制異常線程號 -A90來定位異常代碼的位置(最後的-A90是日志行數,也可以輸出為文本文件或使用其他數字)。可以看到異常代碼的位置。

注意事項:
如果提示 -bash: jstack: command not found,則可以找到jdk的目錄,進入bin目錄
        在執行 ./jstack 進程號 | grep 16進制異常線程號 -A90 即可。
   如果提示 well-known file is not secure,則是因為賬號權限的問題。在/tmp/hsperfdata_$USER/目錄,有一個以進程號命名的文件,當我們執行jmap或者jstack出現上敘信息時,先檢查執行該命令的用戶是否和hsperfdata_$USER這個文件所屬的用戶一致,如果不一致,切換至成一致再執行。執行:sudo -u 有權限的賬號 ./jstack 進程號 | grep 16進制異常線程號 -A50 即可。

熱門文章