日期:2014-05-20  浏览次数:20807 次

关于core dump的提问
今天调试程序的时候,后台日志给的错误提示为memory(coredump)
并且我程序的功能是更新一条数据(插入数据的时候是没有该错误的),数据更新是不成功的,我想请教一下core dump这种错误是什么引起的。请各位大侠提供一些解决该问题的思路和可能引发该错误的方向及可能性。
note:由于服务器上core文件太大了,我打开core文件的时候里面并没有显示任何内容。我不知道core文件存放的内容我是否可以看得到,还是由于服务器速度比较慢,没能及时的显示出来。

------解决方案--------------------
JVM会产生两种dump:coredump 和 heapdump

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

虽然core dump是文本文件,但客观地说直接肉眼看也不算太方便。


【heap dump】
保存java程序内存使用情况。heapdump文件是一个二进制文件,它保存了某一时刻jvm堆中对象情况,这种文件需要相应的工具进行分析,用得较多的是heap analyzer这个工具。这个文件最重要的作用就是分析系统是否存在内存溢出的情况,需要用heapanalyzer分析出溢出的位置。

heap dump会在JVM发生OOM的时候自动产生。