tomcat 產生heapdump文件配置

系統有時會遇到OutOfMemoryError,Java堆溢出了。咱們須要找到形成OutOfMemoryError緣由。通常有兩種狀況: php

一、內存泄露,對象已經死了,沒法經過垃圾收集器進行自動回收; html

二、內存溢出,內存中的對象都還必須存活着,這說明Java堆分配空間不足,檢查堆設置大小(-Xmx與-Xms),檢查代碼是否存在對象生命週期太長、持有狀態時間過長的狀況。 linux


想在泄漏未發生前,取堆轉儲文件分析, 經過jvm參數-XX:+HeapDumpOnOutOfMemoryError(XX:+HeapDumpOnCtrlBreak不知道爲何tomcat啓動不了)可讓JVM在出現內存溢出是Dump出當前的內存轉儲快照。 windows

固然也能夠經過用jmap生產dump文件。windows經過任務管理器查看tomcat的進程pid,linux用ps命令查看進程pid,而後用jmap命令(Java5:jmap -heap:format=b <pid>;Java6:jmap -dump:format=b,file=HeapDump.bin <pid>) 緩存

 

在tomcat中設置jvm參數

linux系統中

1.打開/tomcat_home/bin/catalina.sh文件  tomcat

2.加上:JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump" eclipse

以下圖位置: jvm

注:其中不設-XX:HeapDumpPath時,dump出的文件在/tomcat_home/bin目錄下 工具

Windows系統中

1.打開/tomcat_home/bin/catalina.bat文件 spa

2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump

以下圖位置:

 

分析dump出來的內存快照文件


可使用分析工具進行分析,如:

 

Eclipse的MAT

下載地址:http://www.eclipse.org/mat/downloads.php

說明文檔:http://www.vogella.com/articles/EclipseMemoryAnalyser/article.html#example_project

 

注意:解析過大的HeapDump可能致使Eclipse拋出OutOfMemory的錯誤。這時你須要手動調整Eclipse的緩存大小,能夠參考官網給出的處理方式(原文鏈接

 

Alternatively, edit the MemoryAnalyzer.ini to contain:

-vmargs
-Xmx2g
-XX:-UseGCOverheadLimit

Eclipse插件版打不開的朋友能夠試試 RPC版的MAT (個人232m的dump文件也打不開,難道非得用64bit的機器嗎?):RPC版MAT下載地址 。

 

JProfile

 

等等;

相關文章
相關標籤/搜索