系统有时会遇到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
等等;
- 大小: 5.6 KB
- 大小: 5 KB
分享到:
相关推荐
此外,JVM的堆转储(Heap Dump)文件也能提供详细的内存占用信息,通过分析这些文件可以定位内存泄漏的具体对象。 5. **代码优化**:检查应用程序的代码,避免创建大量短生命周期但占用大量内存的对象,或者及时...
- **heap dump**:通过JVM命令`jmap -dump`生成堆转储文件,然后使用分析工具查看内存中的对象分布,寻找可能的泄漏源头。 - **Tomcat日志**:检查Tomcat的日志文件,异常信息可能提示内存泄漏的存在。 4. **...
- 开启JVM的堆转储(heap dump)和线程转储(thread dump),分析内存泄漏或死锁问题。 7. **与其它应用服务器的集成**: - Tomcat可作为应用服务器在诸如Spring Boot、Apache Maven等框架中集成使用。 - 它也...
例如,在 Linux 系统中,可以通过以下命令生成 dump 文件:`jmap -dump:format=b,file=HeapDump.bin <pid>`。 ##### 3.2 MAT 安装与使用 - **下载地址**:访问 [Eclipse MAT 官方网站]...
- **分析heap dump文件**:当内存溢出发生时,可以通过JVM的`-XX:+HeapDumpOnOutOfMemoryError`参数生成堆转储文件,然后用专门的工具分析。 4. **预防措施**: - **定期监控**:定期检查Tomcat的内存使用,及时...
- **参数**:`-Xms888m -Xmx888m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:/home/weblogic/gc/app1gc.log` - **说明**...
2. 堆内存分析:定期做heap dump,利用MAT或JProfiler分析内存泄漏。 3. 日志分析:分析日志文件,找出性能瓶颈,如SQL查询慢、异常频繁等问题。 4. 调试技巧:学会使用断点、单步执行、变量查看等功能,定位代码...
为了生成Heap Dump,需要在JVM启动参数中添加`-XX:+HeapDumpOnOutOfMemoryError`和`-XX:HeapDumpPath=<dump_file_path>`,前者设置在内存溢出时生成堆转储,后者指定文件保存位置。 ### 7. 测试类准备 编写简单的...
- **堆转储**:定期生成heap dump文件,使用MAT(Memory Analyzer Tool)等工具进行分析。 **2. 解决内存泄漏的具体步骤** - **调整JVM参数**:根据实际情况调整JVM启动参数,如增加初始堆大小(`-Xms`)、最大堆...
2. **使用内存分析工具**:例如VisualVM、MAT(Memory Analyzer Tool)等,分析heap dump文件,找出占用内存最多的对象和类,定位问题源头。 3. **优化代码**:避免创建过多的大对象,及时释放不再使用的对象,尤其...
MAT通过分析heap dump文件(即Java虚拟机的堆内存快照),提供详尽的内存使用报告,包括对象统计、支配树分析、疑似内存泄露集合等,以帮助我们识别那些占用大量内存但不再被程序需要的对象。 1. **MAT的使用方法**...
首先,MAT工具的核心功能是对heap dump文件进行分析。heap dump是Java虚拟机在内存溢出时生成的一种文件,包含了程序运行时的所有对象和类装载信息。通过对heap dump的分析,MAT可以提供以下关键信息: 1. **对象...
- 分析堆转储文件(heap dump),使用MAT(Memory Analyzer Tool)、Eclipse Memory Analyzer等工具找出内存泄漏的源头。 4. **优化垃圾回收策略** - 根据应用特性选择合适的垃圾回收器(如G1、CMS、Parallel等)...
jvisualvm操作手册for linux菜鸟 ...此外,我们还可以使用Thread Dump和Heap Dump功能,快速查看Java程序的运行情况。 jvisualvm是一款功能强大的Java虚拟机监控工具,能够帮助我们实时监控服务器性能,快速排查问题。
在Tomcat的内存监控中,最常用的功能是生成heap dump文件。通过`jmap -dump:format=b,file=heap.hprof <pid>`命令,我们可以将JVM的堆内存快照导出为一个二进制文件,用于后续的内存分析,找出可能的内存泄漏问题。...
- **使用方法**:`jhat <heapdumpfile>` 或 `jhat -J<options> <heapdumpfile>`。 ##### 5. jmap:内存映像工具 - **功能**:`jmap` 可以获取堆内存的快照,并将其输出为一个文件,也可以显示堆中的对象信息。 - **...
- 分析堆转储文件(heap dump),找出占用内存较大的对象集合。 **注意事项:** - 调整JVM参数时需谨慎,过大的堆可能会导致其他问题,如GC停顿时间增加。 - 应用程序设计时应考虑到资源的有效利用,避免无谓的内存...
通过指定参数`-XX:+HeapDumpOnOutOfMemoryError`和`-XX:HeapDumpPath`,我们可以分别控制内存溢出时是否导出dump文件和设置导出文件的路径。 Jvisualvm是一个功能丰富的JVM监控、分析工具,它支持导入内存dump文件...
1. **获取堆文件**: 使用Jvisualvm工具在远程服务器上生成堆文件`heapdump-xxxxxxxxxx.hprof`。 2. **使用MemoryAnalyzer分析**: MemoryAnalyzer是一款由Eclipse提供的免费内存分析工具,它可以独立使用也可以作为...
jmap -dump:format=b,file=<dump_file> ``` 6. **jhat (Java Heap Analyzer Tool)**: jhat是与jmap配合使用的命令,用于分析由jmap生成的堆转储文件,以找出内存泄漏等问题。 7. **jconsole (Java Monitoring...