用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> 檢視執行狀況