触发 Java heap dump

来源:互联网 发布:淘宝gta5刷钱真相 编辑:程序博客网 时间:2024/05/16 09:13

为了分析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请看http://baike.baidu.com/view/677611.htm

   触发 Java heap dump

有以下方法触发heap dump

  1. 使用$JAVA_HOME/bin/jmap -dump来触发,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out <pid>
  2. 使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在java应用的根目录下面。
  3. 在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。
  4. 使用hprof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。
举例说明:

     示例:http://www.51testing.com/?uid-412661-action-viewspace-itemid-241471

JAVA HEAP详细介绍 HTTP://WWW.BLOGJAVA.NET/SUTAO/ARTICLES/162288.HTML