java Heap Dump基本概念及如何获取
2014-12-21 23:10
204 查看
1.Heap Dump
如果你不知道Java里面的Heap是什么意思,这篇文章可能就不太适合你阅读了。一个Heap Dump是指在某个时刻对一个Java进程所使用的内存情况的一次快照。也就是在某个时刻把Java进程的内存以某种格式持久化到了磁盘上。Heap Dump的格式有很多种,而且不同的格式包含的信息也可能不一样。但总的来说,Heap Dump一般都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操作时,往往会触发一次GC,所以你转储得到的文件里包含的信息通常是有效的内容(包含比较少,或没有垃圾对象了)
我们往往可以在Heap Dump以下基本信息(一项或者多项,与Dump文件的格式有关):
所有的对象信息
对象的类信息、字段信息、原生值(int, long等)及引用值
所有的类信息
类加载器、类名、超类及静态字段
垃圾回收的根对象
根对象是指那些可以直接被虚拟机触及的对象
线程栈及局部变量
包含了转储时刻的线程调用栈信息和栈帧中的局部变量信息
一个Heap Dump是不包含内存分配信息的,也就是说你无法从中得知是谁创建了这些对象,以及这些对象被创建的地方是哪里。
但是通过分析对象之间的引用关系,往往也能推断出相关的信息了。
2.如何获取Heap Dump文件
下面介绍一下常用的三种获取Heap Dump的方式当OutOfMemoryError发生时
这可是一个相当便捷的参数了,因为当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。那么通过在你的启动脚本中,为Java命令添加以下参数,就可以得到一份内存信息了:
Java –Xmx1024m …. -XX:+HeapDumpOnOutOfMemoryError ……
交互式地获取Heap Dump
说实话,我还没用过这个方式,但看起来很方便。和上面的方式类似,也是添加一个Java命令选项,然后你就可以通过使用快捷键Ctrl + Break去获取当前的内存转储信息了。
Java –Xmx1024m …. -XX:+HeapDumpOnCtrlBreak ……
使用工具获取
这是我常用的方式,通过JDK自带的一些小工具,你可以参考一下http://blog.romebuilder.com/2011/06/393/
这里主要用到了jps, jmap
通过jps得到Java进程的PID,然后使用jmap转储
jmap –dump:format=b,file=heap.bin PID
还有基本的GUI工具也可以达到类似的效果,如jconsol, Eclipse memory analyzer等,大家可以自己去摸索一下,不过以上提到方法也已经能够满足大多数的应用场景了吧。
转载自:http://www.cnblogs.com/ungshow/archive/2012/04/05/2432846.html
相关文章推荐
- 如何获取java heap dump
- 第1章 Java基本概念及环境配置——FAQ1.07 什么是JVM?有什么作用?工作机制如何?
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 第1章 Java基本概念及环境配置——FAQ1.11 什么是GC?GC的工作原理如何?
- 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 第1章 Java基本概念及环境配置——FAQ1.15 如何编译. 运行Java应用程序?
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 如何生成javacore和heapdump
- javaseday36(dom基本概念 名称空间 通过document 获取节点多种方式)
- 第1章 Java基本概念及环境配置——FAQ1.03 Java语言是如何产生和发展的?
- 第1章 Java基本概念及环境配置——FAQ1.16 如何将程序中的文档注释提取出来生成说明文档?
- 如何手动生成heapdump和javacore文件
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- websphere如何产生javacore和heapdump