注意分析 heap profile 文件
1 运行应用程序(使用jre版本为1.6以上)
2 命令行执行
jmap -dump:format=b,file=/tmp/mem4.hprof <pid>
其中/tmp/mem4.hprof 是dump出来的内存映像发文件,可以取任何后缀的名字。
例子:
sudo -u admin /opt/taobao/install/jdk-1.6.0_32/bin/jmap -dump:format=b,file=/tmp/mem4.hprof 32191
3 使用eclipse 的MAT分析/tmp/mem4.hprof 文件,可以查看哪些对象占据大多数的内存空间。
下载链接:
http://www.eclipse.org/mat/downloads.php
4 个人感觉MAT最重要的是leak suspects,帮助分析出那些可疑对象:
分析图片一
分析图片二
一看 LinkedBlockingQueue 有问题,占用了太多内存有问题,再说不建议这种无穷扩大的队列
5 获得hprof文件的其他途径:
java -Xms20M -Xmx20M -Xmn10m -XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:PretenureSizeThreshold=3000000 -Xloggc:D:/gc.log
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/mem4.hprof gc.SerialGCDemo
其中红色部分表示内存OOM的时刻,将内存镜像输出文件到D:/test.hprof
-XX:+HeapDumpOnOutOfMemoryError 打开选项
-XX:HeapDumpPath=/tmp/mem4.hprof 指定路径
- 大小: 44.8 KB
- 大小: 41.7 KB
分享到:
相关推荐
Java编程语言在处理大型应用...总的来说,结合JMAP和MAT,我们可以有效地定位和解决Java应用程序中的内存泄漏问题。确保定期监控和分析内存使用情况,可以预防和早期发现潜在的内存问题,从而保持应用的高效稳定运行。
4. **查找内存泄漏**:利用MAT的Dominator Tree和Leak Suspects报告,定位可能的内存泄漏源。 5. **优化调整**:根据分析结果,优化代码,减少不必要的对象创建,修复内存泄漏问题,并重新测试。 在实际开发中,...
它适用于Java 1.8版本,这意味着它能够有效地处理运行在Java 8环境下的应用程序所产生的heapdump文件,帮助开发者理解和定位内存问题。 在Java开发中,内存管理是关键部分,特别是对于大型或长时间运行的应用,内存...
MemoryAnalyzer(MAT)是IBM开发的一款强大的JVM堆内存分析工具,它能够帮助开发者深入理解内存消耗,识别内存泄漏和不必要的对象留存,从而有效地解决OOM问题。 MAT主要基于.hprof文件进行分析,这种文件格式是...
1. 内存泄漏的诊断:使用内存分析工具来发现潜在的内存泄漏源。例如,通过MAT分析heap dump来查找大对象和长期存活对象的模式。 2. 代码分析:定位代码中可能导致内存泄漏的部分。常见的内存泄漏场景包括静态集合的...
4. **使用内存分析工具**:定期进行内存分析,使用MAT等工具找出内存占用高的对象,分析其生命周期和引用关系,定位内存泄漏源头。 5. **日志监控**:加强日志监控,对异常情况快速响应,及时获取到OOM等关键信息。...
MAT提供了更丰富的视图和分析功能,而VisualVM则集成了多种监控和分析工具,包括CPU、内存和线程。根据具体需求和使用习惯,可以选择合适的工具。 四、注意事项 - 分析内存溢出问题时,应确保有足够的磁盘空间存储...
在获取到Heap Dump文件后,可以使用各种工具(如VisualVM、MAT等)对文件进行深入分析,查找内存泄漏的根源。具体步骤包括但不限于: 1. **对象图分析**:通过对象图查看哪些对象占用了大量内存。 2. **引用链追踪*...
1. **内存泄漏检测**:MAT能够通过分析heap dump文件(JVM在运行时生成的内存快照),找出长期持有大量对象的类,从而定位可能存在的内存泄漏。 2. **对象视图**:工具提供了不同的视图来展示内存中的对象,如 ...
同时,也展示了如何利用一系列Java诊断工具进行问题定位和解决,如jstat、jstack、jmap和MAT。这些工具对于排查和优化Java应用程序的性能至关重要,对于任何IT专业人员来说,掌握这些工具的使用是提升系统运维能力的...
当遇到内存溢出问题时,通常会先使用`jmap`生成dump文件,然后使用专门的分析工具,如Eclipse Memory Analyzer (MAT)、VisualVM等对dump文件进行解析。这些工具能帮助我们找到内存泄漏的根源,识别长期存活的大对象...
了解Java对象的生命周期、引用类型及垃圾回收机制对于有效定位和解决内存泄漏问题至关重要。 1. **Java对象的size**: - 对象的实际大小取决于其属性的类型和数量。 - 对象头部包含了元数据信息,如对象哈希码、...
通过深入理解和熟练运用MAT,开发者能够更有效地诊断和修复内存泄漏问题,提升应用的稳定性和效率。在实际工作中,结合MAT和其他性能监控工具,我们可以构建起一个全面的性能优化体系,确保Java应用程序的健康运行。
在MAT中,你可以通过"Leak Suspects"报告快速定位可能的内存泄漏,"Dominator Tree"视图则帮助理解对象间的引用关系。 文件列表中的`ha39.jar`可能是用于生成或分析heapdump的工具,它可能包含了特定的内存分析算法...
* 使用jmap命令dump内存对象,然后利用Eclipse MAT逐一分析开销最大的classloader和重复class。 4. Metaspace Metaspace错误表示Metaspace已被用满,通常是因为加载的class数量太多或体积太大。常见的原因包括: ...
- 使用`top`命令结合`jstack`、`jmap`等工具深入分析内存消耗较大的进程和线程。 3. **并发问题** - **原因分析**:在高并发环境下,线程过多会导致内存压力增大。 - **解决策略**: - 限制线程池的最大线程数...
5. **jmap(Memory Map for Java)**:它可以导出堆内存快照,供其他工具如jhat或MAT进行分析,也可以获取垃圾收集器和堆内存的详细信息。 6. **jstack(Java Thread Stack Trace)**:提供Java线程堆栈信息,用于...
常用的JVM诊断工具有jps、jmap、jstat、jinfo、jstack以及MAT等,它们可以帮助开发者识别和解决问题,例如内存泄漏和内存溢出(OOM)。内存泄漏可能导致程序运行缓慢,甚至崩溃,常见的内存泄漏场景包括未关闭的...
2. **内存区域**:JVM内存主要分为堆内存和栈内存。堆是所有线程共享的区域,用于存储对象实例。栈则为每个线程分配,用于存储局部变量、方法调用等。 3. **垃圾回收**:GC(Garbage Collection)是JVM自动管理内存...