jstack 排查 java 進程占用大量 CPU 問題


1、 top 看看哪個進程是罪魁禍首

2、將這個進程的jstack dump 到一個文件里面,以備使用。

jstack -l 25886 > /tmp/jstack.log
# 如果報錯,則加 -F 命令強制執行。
jstack -F 25886 > /tmp/jstack.log

使用 sftp 弄到本地。

3、查看這個進程里面哪些子進程, 按 P 鍵排序占用 CPU 的子進程

top -H -p 25886 (top得到的進程號)
# 這里得到的子進程id 為 26017,把該值轉化為十六進制

echo 26017 |awk '{printf("%x\n",$0)}'
# 得到
65a1

4、在 jstack.log 中搜索 65a1

============================

top -H -p 25886 (top得到的進程號)
# 這里得到的子進程id 為 26017,把該值轉化為十六進制

printf "%x" 26017
# 得到
65a1

jstack 26017 | grep 65a1

通過 jmap 找到最耗內存的對象

方法:

jmap -histo:live 25886 | more


免責聲明!

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



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