用JMap和JStack做堆dump和線程dump
命令
1. jmap -dump:format=b,file=filename pid
jmap -dump:format=b,file=jmap0225.bin 18646
jmap -histo<:live> pid : 查看當期那 heap 的對象
sudo -u tomcat jmap -histo 1234 | sudo -u tomcat tee /tmp/histo.log
jmap --heap pid : 查看 heap 結構
2. jstack pid >> file
jstack 18646 >> jstackfile
出現錯誤
well-known file is not secure
需要將執行命令的用戶改為啟動tomcat線程用戶, 如下
sudo -u tomcat jmap -dump:file=filename pid
------
使用jstack分析步驟
1. top 查看java進程
2. top -p <java-pid> -H 查看消耗cpu的線程
3. <thread-id> 轉為 十六進制
3. sudo -u tomcat jstack <java-pid> | grep -A 10 <0x thread-id> 查看運行狀況