2017-01-20 134 views
2

目前我有一個核心轉儲文件,我想提取堆轉儲。無論我嘗試,我總是收到以下錯誤信息:從核心轉儲中提取堆轉儲(hprof)

[email protected]:~$ sudo /opt/java-MyApp/bin/jmap -dump:format=b,file=my-file.hprof /opt/java-MyApp/bin/java /home/god/tmp/core 
[sudo] password for god: 
Attaching to core /home/god/tmp/my-app-core-dump from executable /opt/java-MyApp/bin/java, please wait... 
Error attaching to core file: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process) 
sun.jvm.hotspot.debugger.DebuggerException: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process) 
    at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:411) 
    at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305) 
    at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:156) 
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:191) 
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) 
    at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:83) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at sun.tools.jmap.JMap.runTool(JMap.java:201) 
    at sun.tools.jmap.JMap.main(JMap.java:130) 

如果我嘗試打開使用gdb的核心,它就像一個魅力:

gdb --core core 
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 
Copyright (C) 2016 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-linux-gnu". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word". 
[New LWP 11241] 
[New LWP 11242] 
[New LWP 11243] 
[New LWP 11244] 
[New LWP 11245] 
... 
[New LWP 23423] 
[New LWP 30560] 
[New LWP 11240] 
Core was generated by `/opt/java-MyApp/bin/java -Djava.util.logging.config.file=/opt/MyAp'. 
#0 0x0000003c838cc0a6 in ??() 
[Current thread is 1 (LWP 11241)] 
(gdb) 

從所有的東西我看過了,我應該請務必在使用{{gcore}}完成核心轉儲時安裝在相同路徑和版本上的JVM。做完所有我需要做的就是致電jmpa witht確切的jvm:

sudo $JVM_USED_WHILE_GCORE_HOME/bin/jmap -dump:format=b,file=$OUTPUT_HPROF_FILE $JVM_USED_WHILE_GCORE_HOME/bin/java $CORE_FILE_PATH 

有什麼我失蹤了嗎?爲什麼我一直在遠程過程中出現「找不到符號」gHotSpotVMTypes「錯誤信息?

+0

在gdb下,你能找到'gHotSpotVMTypes'符號嗎? – apangin

+0

並非都是OpenJDK版本?或者我可以檢查什麼? –

+0

在gdb下鍵入'gHotSpotVMTypes' – apangin

回答

1

問題很簡單。該/opt/java-MyApp/bin/java路徑是symlink,一旦我重新創建的結構,我不得不用來產生核心轉儲它像一個魅力的機器上。看來這些圖書館被其規範的路徑所使用。