找java進程
ps aux|grep java
yyy 4990 0.3 2.3 3098560 191312 ? Sl Aug29 16:11 /usr/xxx/jdk1.6.0_29/bin/java -Xms128m -Xmx768m -jar /usr/share/projectlibre/projectlibre.jar --silentlyFail true
使用gdb生成gcore快照文件
sudo gdb -q --pid=4990
【此處省略亂七八糟的輸出內容】
......
0x00007ffc1672366b in pthread_join (threadid=140720663160576, thread_return=0x7fffe8470210) at pthread_join.c:92
92 pthread_join.c: No such file or directory.
(gdb) generate-core-file
warning: target file /proc/4990/cmdline contained unexpected null characters
Saved corefile core.4990
(gdb) detach
Detaching from program: /usr/xxx/jdk1.6.0_29/bin/java, process 4990
(gdb) quit
gdb -q --pid=4990
(gdb) generate-core-file
(gdb) detach
(gdb) quit
quit簡單了,退出gdb模式
方法1
用jmap轉換gcore的dump文件變成hprof
sudo /usr/xxx/jdk1.6.0_29/bin/jmap -dump:format=b,file=heap.hprof /usr/xxx/jdk1.6.0_29/bin/java core.4990
Attaching to core core.4990 from executable /usr/xxx/jdk1.6.0_29/bin/java, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.4-b02
Dumping heap to heap.hprof ...
Finding object size using Printezis bits and skipping over...
Heap dump file created
接着就生成了heap.hprof這個文件
注意:jmap、java等指令必須是與啓動4990進程一致的版本纔可以成功轉換,否則還是會有問題。
可以使用jvisualvm打開 heap.hprof查看jvm的快照信息。
方法2
可以直接通過jvisualvm的主菜單直接點擊 Add VM Coredump 來加載gcore的dump文件進行自動轉換,但也是需要jdk版本相同纔可以,這個在點擊該菜單選項之後的彈出窗口裏會需要進行指定。