当应用程序发生内存泄露时,会生成HeapDump文件。HeapDump文件是一个二进制文件,它保存了某一时刻jvm堆中对象情况。这个文件最重要的作用就是分析系统是否存在内存溢出的情况,通过HeapAnalyzer可以很简单地分析出溢出的位置。以了解哪些对象占用了太多的堆栈空间,来发现导致内存泄露或者可能引起内存泄露的对象。

HeapDump的文件名类似于:heapdump.20120503.170018.1510.0003.phd,即heapdump....phd。

JavaCore文件主要保存的是java应用各线程在某一时刻的运行的位置,即执行到哪一个类的哪一个方法哪一个行上。JavaCore是一个文本文件,打开后可以看到每一个线程的执行栈,以stacktrace的方式显示。通过对JavaCore的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,如数据库查询,长期得不到响应,最终导致系统崩溃。

在一些平台上,JavaCore也被称为JavaDump,它包含jvm和应用程序相关的在特定时刻的一些诊断信息,如操作系统,应用程序环境,线程,native

stack本地堆,锁,和内存的信息。

Windows/Linux系统上JavaCore的文件名类似于:javacore.20120707.231730.1510.txt,即

javacore.YYYYMMDD.HHMMSS.PID.txt

AIX系统上:javacorePID.TIME.txt

我们常常遇到系统响应慢或无响应的情况,这时可以采用手工的方式生成JavaCore及HeapDump文件,通过对这两个文件的分析,查出原因进而解决问题.在Unix/Linux上,执行ps

-ef|grep java命令找出java进程id ,然后再执行 kill -3 进程号

的操作,等文件生成后再做一次同样的操作,再产生一组文件。两组文件在分析JavaCore时特别有效,困为它可以看出在先后两个时间点上,线程执行的位置,如果发现先后两组数据中同一线程都执行在同一位置,则说明此处可能有问题,因为程序运行是极快的,如果两次均在某一点上,说明这一点的耗时是很大的。