文档章节

tomcat 产生heapdump文件配置

江江的喵
 江江的喵
发布于 2015/12/17 22:28
字数 499
阅读 463
收藏 21

系统有时会遇到OutOfMemoryError,Java堆溢出了。我们需要找到造成OutOfMemoryError原因。一般有两种情况:

1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收;

2、内存溢出,内存中的对象都还必须存活着,这说明Java堆分配空间不足,检查堆设置大小(-Xmx与-Xms),检查代码是否存在对象生命周期太长、持有状态时间过长的情况。


想在泄漏未发生前,取堆转储文件分析, 通过jvm参数-XX:+HeapDumpOnOutOfMemoryError(XX:+HeapDumpOnCtrlBreak不知道为什么tomcat启动不了)可以让JVM在出现内存溢出是Dump出当前的内存转储快照。

当然也可以通过用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文件 

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

如下图位置:

注:其中不设-XX:HeapDumpPath时,dump出的文件在/tomcat_home/bin目录下

Windows系统中

1.打开/tomcat_home/bin/catalina.bat文件

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

 

等等;

本文转载自:http://jiangsha.iteye.com/blog/1576355

共有 人打赏支持
江江的喵
粉丝 2
博文 53
码字总数 4966
作品 0
浦东
程序员
Windchill 在 AIX heapdump 和 javacore的问题

Windchill 在 AIX heapdump 和 javacore的问题 Windchill系统中,产生dump和javacore的主要原因是内存溢出,一般情况下,Methodserver和tomcat的内存设置偏小,在并发用户很多时,会造成内存...

晨曦之光
2012/03/09
0
0
javacore文件及heapdump文件分析

java程序运行时,有时会产生javacore及heapdump文件,为什么会产生这些文件呢?产生后应该如何分析呢?本文将回答上面的问题。 java程序在遇到致命问题时,就会产生这两个文件,有时产生时,...

吕猛
2010/12/13
0
0
Heapdump javacore文件分析工具

这个一定要记下来,以备不时之需: IBM HeapAnalyzer 更多信息见官方网站地址:http://www.alphaworks.ibm.com/tech/heapanalyzer 在我们的应用程序发生内存泄露的时候,会生成heapdump文件,...

晨曦之光
2012/03/09
0
0
关于java 堆内存溢出的问题

最近在测试中,一次load 1w 条数据,到list中,出现 java.lang.OutOfMemoryError: Java heap space 的异常提示,想使用Eclipse Memory Analyser来分析下,发现我不会生成dump文件 网上找到的...

骑单车的程序员
2014/08/19
362
9
使用mat命令行分析heapdump

Mat是分析java堆栈的利器,与jdk自带的工具比较,分析快,占用内存少,各种图形显示有利于定位问题。 但是在真正的线上环境内存配置都比较大,目前上午笔记本内存配置是4G,无法分析线上应用...

yingtju
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed命令扩展使用操作

打印某行到某行之间的内容 假若文件test.txt的内容是: ertfff**[abcfd]123324444[rty]**fgfgf 怎么能截取 [abcfd]123324444[rty] 这一部分出来呢? 操作命令: 知道开始行和结...

野雪球
14分钟前
0
0
JVM内存笔记

Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原...

凌渡
20分钟前
0
0
284. Peeking Iterator

Description Tag: Design Difficulties: Medium Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the pee......

52iSilence7
22分钟前
0
0
防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
48分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部