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

 

等等;

相关文章
相关标签/搜索