上一篇介紹了jmap基本的應用,接著就要講jmap的重點!!導出內存映像文件,而導出的方式分為兩種:手動、自動。這篇會先介紹如何手動導出hprof文件
jmap -dump:[live,] format=b, file=<filename> <pid>
任何時候想導出皆可使用此指令進行,但要注意!!若程式出現崩潰OutOfMemoryError: Java heap space
,手動的方式肯定是來不及匯出文件,只要一出現上面這錯誤,tomcat的process便會直接停止,故也無法進行dump了。
package Controller;
import java.util.ArrayList;
public class JmapDump{
public static void main(String[] args) throws InterruptedException{
Thread.sleep(15000);
ArrayList<String[]> list = new ArrayList<>();
for(int x = 0;x<1001;x++){
String[] arr = new String[1024*x];
list.add(arr);
Thread.sleep(50);
}
}
}
編譯與執行的指令說明,請參考Day4-java語言編譯器:javac & 運行工具:java (上)
透過jps
查看,請參考Day7-JDK查看正在運行的Java進程工具:jps
我查到我這次的進程是6597,以下示範的指令記得將6597改為欲查看的進程id喔!
jmap -dump:format=b,file=manual.hprof 6597
✎tips
OutOfMemoryError: Java heap space
manual.hprof
)在程式剛運行沒多久,第二次(檔名:manual1.hprof
)在接近69秒時,檔案大小差異滿大的!!75.1MB與3.74GB的差異
File exists
訊息下篇會接著介紹如何自動導出hprof文件