標籤:定位 記憶體 使用率 並且 作業系統 開啟 rac linux 執行
很多情況下,都會出現dump這個字眼,java虛擬機器jvm中也不例外,其中主要包括記憶體dump、線程dump。
當發現應用記憶體溢出或長時間使用記憶體很高的情況下,通過記憶體dump進行分析可找到原因。
當發現cpu使用率很高時,通過線程dump定位具體哪個線程在做哪個工作佔用了過多的資源。
首先,記憶體dump是指通過jmap -dump <pid>輸出的檔案,而線程dump是指通過jstack <pid>輸出的資訊。
兩個dump可以單獨使用,也可以在特定場合下結合使用。
在linux作業系統下(已安裝jdk),執行jps命令,列出正在啟動並執行java程式的進程ID。
使用top查看目前正在啟動並執行進程使用系統資源情況。
其中進程號為24660的進程,jps輸出資料行表和top列表中都出現,並且在top列表中顯示是由java COMMAND啟動的。
其中%MEM為2.9,說明佔用系統記憶體為2.9%,當前系統大概8G記憶體;另外%CPU指的是當前進程使用CPU資源百分比;
【記憶體dump】
jmap –dump:live,format=b,file=heap.bin <pid>
參考資料:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
將產生的heap.bin檔案,使用ha456.jar工具開啟分析。java -jar -Xmx3000m ha456.jar
【線程dump】
jstack -m <pid> >jvm_deadlocks.txt
jstack -l <pid> >jvm_listlocks.txt
參考資料http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstack.html
使用top -H -p <pid>找出某進程中要分析的線程ID,然後將線程ID轉換為16進位後,線上程dump檔案中搜尋相關資訊
Jvm dump介紹與使用(記憶體與線程)