Java程序的快照(dump)分为两种:thread dump, heap dump。前者记录了进程(process)中各线程(Thread)(在CPU中的)运行状态主要用来解决死锁(deadlock)问题,后者记录了Java堆的情况,主要用来分析内存泄露问题。
生成堆dump(heapdump)文件方法
1. 在启动Java程序时添加参数:-XX:+HeapDumpOnCtrlBreak -XX:HeapDumpPath=
-
启动程序;
-
用jps或者ps指令找到此程序pid,例如17992;
-
运行kill -3
; -
在my_dump_path下可以找到生成的dump文件,文件名为java_pid
.hprof. ,例如:java_pid17992.hprof.20120519.141323
启动程序的完整脚本:
!/bin/sh
JARS="" for i in ./*.jar; do JARS="\(JARS":\)i done JAVA_OPTS="-XX:+HeapDumpOnCtrlBreak -XX:HeapDumpPath=\(HOME/backup" exec "\)/bin/java" ${JAVA_OPTS} -cp $JARS com.leechau.mina.echoServer.EchoServer 分析dump文件