2017-01-20 6 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) 

[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でコアを開こうとすると、それは魔法のように動作:ものは何でも私は常に、次のエラーメッセージが表示されます試してみました{{gcore}}を使ってコアダンプを行ったときと同じパスとバージョンに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 

私は欠けているものがある:私が行うために必要なすべてが、その正確なJVM withtコールJMPAがされていることを行われていますか?なぜ "シンボルを見つけることができませんでした"というgHotSpotVMTypesを "リモートプロセス中に"エラーメッセージが表示されるのですか?

+0

gdbで、 'gHotSpotVMTypes'シンボルを見つけることができますか? – apangin

+0

はOpenJDKのすべてのバージョンではありませんか?または私は何を確認してもよいでしょうか? –

+0

gdbの下に 'p gHotSpotVMTypes'とタイプします – apangin

答えて

1

問題はかなり簡単でした。 /opt/java-MyApp/bin/javaのパスはsymlinkでしたが、コアダンプを生成するために使用したマシンのように構造を再作成すると、魅力的に機能しました。ライブラリは標準的な方法で使われているようです。

関連する問題