2017-01-20 15 views
2

현재 코어 덤프 파일이 있는데 힙 덤프를 추출하고 싶습니다.코어 덤프에서 힙 덤프 (hprof) 추출

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) 

모든 것들에서 나는, 내가해야 읽고 : 그것은 마법처럼 작동 내가 GDB와 함께 코어를 열려고하면

[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) 

: 무엇이든간에 나는 항상 다음과 같은 오류 메시지가 시도 코어 덤프가 {{gcore}}를 사용하여 수행되었을 때와 동일한 경로와 버전에 JVM을 설치해야합니다. 내가해야 할 일은 정확한 jvm을 가지고 jmpa를 호출하는 것입니다 :

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를 constatly 얻는가?

+0

gdb에서'gHotSpotVMTypes' 심볼을 찾을 수 있습니까? – apangin

+0

은 모두 OpenJDK 버전이 아닙니까? 또는 무엇을 확인할 수 있습니까? –

+0

gdb의'p gHotSpotVMTypes' 유형 – apangin

답변

1

문제는 매우 간단합니다. /opt/java-MyApp/bin/java 경로는 symlink이었습니다. 일단 구조체를 다시 만들었 으면 코어 덤프를 생성하는 데 사용되는 기계에서 매력을 발휘했습니다. 도서관이 정식 경로로 사용 된 것 같습니다.