@xtccc
2015-12-24T21:02:53.000000Z
字数 990
阅读 2213
Java
参考:
Eclipse Memory Analyzer (MAT) 能够将对objects的引用情况进行可视化展现,进而帮助开发者发现内存相关的问题(如内存泄露,内存占用过高等)。
什么是 heapdump ?
A heap dump is a snapshot of the complete Java object graph on a Java application at a certain point of time. It includes all objects, fields, primitive types and object references, and is stored in a binary format called HPROF .
对于SUN JVM而言,生成heap dump的几种方法:
1. 在发生 java.lang.OutOfMemory 异常时,由JVM自动生成
2. 使用命令行工具 jmap
3. 使用 JMS 和 jconsole
我们可以在启动Java app时添加参数 -XX:+HeapDumpOnOutOfMemoryError
,使得当 OutOfMemoryError 异常发生时,JVM可以自动地在当前目录下生成一个heapdump文件,文件名为 java_pid.hprof 。 也可以通过参数 -XX:HeapDumpPath=path_to_file
来指定heapdump文件的路径及文件名。
如果知道正在运行的Java app的进程号pid,则可以通过下述命令为该Java app生成heapdump文件:
> jmap -dump:file=path_to_file pid
注意:运行jmap命令的用户必须是pid进程的用户,否则可能会出现错误:“Unable to open socket file: target process not responding or HotSpot VM not loaded”
怎样知道Java app的process id?使用命令 jps