标签:
JavaCore是关于CPU的,而HeapDump文件是关于内存的。
JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。
HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。
1 -Xloggc:${目录}/temp_gc.log (GC日志文件) 2 -XX:+HeapDumpOnOutOfMemoryError (内存溢出时生成heapdump文件) 3 -XX:HeapDumpPath=${目录} (heapdump文件存放位置)
1 jmap -dump:format=b,file=temp_heapdump.hprof
而javacore文件的生成,则需要依赖于kill命令,当jvm进程被杀死的时候,生成javacore文件。
1 -Xverbosegc:file=${目录}/temp_gc.log (GC日志文件) 2 -XX:+HeapDumpOnOutOfMemoryError (内存溢出时生成heapdump文件) 3 -XX:+HeapDumpOnCtrlBreak (可以通过ctrl+break组合键动态生成heapdump文件 HP JVM也在jdk6中取消了这一方式吗??) 4 -XX:HeapDumpPath=${目录} (heapdump文件存放位置)
1 -XverboseGClog: ${目录}/temp_gc.log (GC日志文件) 2 -Xdump:heap:events=user,file=${目录}/pid%uid%pid.phd
表示可以根据需要通过kill -3 产生DUMP文件,%uid和%pid为变量
1 wsadmin> set jvm [$AdminControl completeObjectName type=JVM,process=server1,*] 2 wsadmin> $AdminControl invoke $jvm generateHeapDump 3 wsadmin> $AdminControl invoke $jvm dumpThreads
以上主要是通过命令行,配置使用kill命令生成javacore和heapdump文件。
总结:
linux环境下,使用ps -ef 或者ps -aux命令,或者top命令,得到pid,然后使用kill 命令杀死特定进程,产生java core 和heap dump 文件。kill命令就是用户向进程发送signal。
参考文献:
http://www.codeceo.com/article/java-javacore-heapdump.html
http://blog.itpub.net/14710393/viewspace-754416
标签:
原文地址:http://www.cnblogs.com/hzg1981/p/5558065.html