java記憶體分析總結
1、內建的jconsole工具。
(1)如果是從命令列啟動,使 JDK 在 PATH 上,運行 jconsole 即可。
(2)如果從 GUI shell 啟動,找到 JDK 安裝路徑,開啟 bin 檔案夾,雙擊 jconsole 。
(3)當分析工具彈出時(取決於正在啟動並執行 Java 版本以及正在啟動並執行 Java 程式數量),可能會出現一個對話方塊,要求輸入一個進程的 URL 來串連,
也可能列出許多不同 的本地 Java 進程(有時包含 JConsole 進程本身)來串連。
參照http://jiajun.iteye.com/blog/810150
2、內建的jmap工具
jmap 是一個可以輸出所有記憶體中對象的工具,甚至可以將VM 中的heap,以二進位輸出成文本。使用方法 jmap -histo pid。如果連用 SHELL jmap -histo pid>a.log可以將其儲存到文本中去(windows下也可以使用),在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。
(1)windows環境DOS查詢連接埠和PID號:TaskList/svc
(2)用netstat -ano命令,列出所有連接埠對應的PID
3、mat
a、產生dump檔案
一個進程對應一個.hprof檔案,
(1)設定jvm的參數:-XX:+HeapDumpOnOutOfMemoryError產生的java_pid7888.hprof檔案位於當前工程目錄下;
(2)通過jmap -dump:format=b,file=HeapDump.bin <pid>
(3)通過jconsole產生
選擇 Mbean -> com.sun.management -> HotSpotDiagnos -> Operations -> dumpHeap
在參數p0中填寫儲存dmp檔案的路徑,例如f:/my.hprof,檔案的尾碼名要為hprof。
點擊dumpHeap按鈕產生dump檔案。
b、安裝mat開啟.hprof檔案進行分析