技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Java --> Java heap dump触发和分析

Java heap dump触发和分析

浏览:6616次  出处信息

    为了分析java应用的内存泄漏,使用thread dump往往解决不了问题。使用jstat【eg:jstat -gcutil pid 1000 5】工具查看运行的java应用的heap size,perm size ,survivor ratio等,当时你无法知道是什么对象把堆填满了。

什么是 Java heap dump

    首先需要搞懂什么是java heap,java heap是分配给实例类和数组对象运行数据区,所有java线程在运行期间共享heap中的数据。Java heap dump相当于java应用在运行的时候在某个时间点上打了个快照(snapshot)。

     如果你不懂啥是snapshot,点击这里

触发 Java heap dump

   有以下方法出发heap dump

  • 使用$JAVA_HOME/bin/jmap -dump来触发,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out

  • 使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在java应用的根目录下面。

  • 在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。

  • 使用hprof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。

  •    

分析 Java heap dump

1:使用IBM HeapAnalyzer

   

    IBM HeapAnalyzer是一款免费的JVM内存堆的图形分析工具,它可以有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因。

    下载解压后有一个ha413.jar,执行: java -Xmx512m -jar ha413.jar /home/longhao/heapdump.out

     执行结果如图所示:

   


2:jhat

    jhat(Java Head Analyse Tool )是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言OQL,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。

    示例: $JAVA_HOME/bin/jhat -J-Xmx512m /home/longhao/dump.out

   

   


3:Eclipse MemoryAnalyzer

   

    Eclipse Memory Analyzer是一个快速并且功能强大的Java heap分析器,能够帮助你查找内存泄漏和减少内存消耗。在File>Acquire Heap Dump>configure>HPROF jmap dump provider设置一下分析应用的JDK,点击相关应用列表来生成heap dump并分析。

   

   

   


    在socket,nio中的有些API中,申请的内存是直接想OS要的,在堆中分析内存是查看不到的,可以通过-XX:MaxDirectMemorySize=来设置应用向OS直接申请的最大内存数。    

建议继续学习:

  1. dump oracle events中间篇“event的分类与dump”    (阅读:3231)
  2. 数据结构之treap    (阅读:2687)
  3. dump oracle events开始篇“event定义”    (阅读:2760)
  4. 从dump文件中抽取部分库表    (阅读:2461)
  5. 理解Heap Profling名词-Shallow和Retained Sizes    (阅读:2233)
  6. dump oracle events过渡篇“events知多少”    (阅读:2245)
  7. Android安全–一次简单的脱壳Dump dex实践    (阅读:1887)
  8. oracle跟踪事件(dump)总结    (阅读:1715)
  9. core dump磁盘报警问题排查过程    (阅读:1233)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Java陷阱(2010版)
后一篇:Java泛型简明教程 >>
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1