2015-11-16 16 views
16

実行中のJavaプロセスからヒープ・ダンプを取ろうとすると、このStacktraceが表示されます。これを引き起こす原因と適切なヒープダンプを行うために何をする必要がありますか?Javaヒープ・ダンプ・エラー - メタデータがポリモフィックでないと思われる

Dumping heap to dump.bin ... 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
    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:483) 
    at sun.tools.jmap.JMap.runTool(JMap.java:201) 
    at sun.tools.jmap.JMap.main(JMap.java:130) 
Caused by: java.lang.InternalError: Metadata does not appear to be polymorphic 
    at sun.jvm.hotspot.types.basic.BasicTypeDataBase.findDynamicTypeForAddress(BasicTypeDataBase.java:278) 
    at sun.jvm.hotspot.runtime.VirtualBaseConstructor.instantiateWrapperFor(VirtualBaseConstructor.java:102) 
    at sun.jvm.hotspot.oops.Metadata.instantiateWrapperFor(Metadata.java:68) 
    at sun.jvm.hotspot.memory.DictionaryEntry.klass(DictionaryEntry.java:71) 
    at sun.jvm.hotspot.memory.Dictionary.classesDo(Dictionary.java:66) 
    at sun.jvm.hotspot.memory.SystemDictionary.classesDo(SystemDictionary.java:190) 
    at sun.jvm.hotspot.memory.SystemDictionary.allClassesDo(SystemDictionary.java:183) 
    at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeClasses(HeapHprofBinWriter.java:942) 
    at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:427) 
    at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:62) 
    at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260) 
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:223) 
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) 
    at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:83) 
    ... 6 more 

環境:CentOSの64ビット、JavaのOpenJDKのランタイム環境はOpenJDKの64ビットサーバーは、VMのJavaを見るために

Usign ps(25.31-B07、混合モードを構築)(1.8.0_31-B13を構築します)使用されたバージョン:

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-1.b13.el6_6.x86_64/jre/bin/java 

私の最初の試みました:

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-1.b13.el6_6.x86_64/bin/jmap -dump:format=b,file=dump.bin 14984 

ました私:

14984: Unable to open socket file: target process not responding or HotSpot VM not loaded 
The -F option can be used when the target process is not responding 

は、だから私は-Fオプション

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-1.b13.el6_6.x86_64/bin/jmap -F -dump:format=b,file=dump.bin 14984 
+1

でAWS ElasticBeanstalkインスタンスにインストールした固定コマンドでは、Javaの同じバージョンを使用していると、彼らがしているあなたは確かにありますどちらも64ビットですか?同じユーザーで実行していますか? – biziclop

+0

おそらくhttps://bugs.launchpad.net/ubuntu/+source/openjdk-6/+bug/1417962 – RobAu

答えて

15

[OK]をクリックして走った、私はそれを発見しました。

私はjmapコマンドをとして実行していましたが、Javaプロセスを開始したユーザーとして実行する必要がありました。私の場合は

sudo -u robau ./jmap -dump:format=b,file=/tmp/dump.bin 14984 

は、このJDKのバグに関連しているように思われる。 https://bugs.openjdk.java.net/browse/JDK-8075773

+1

に関連しています。ヒープ・ダンプを解析する便利な組み込みヒープ・ファイル・アナライザjhat /tmp/dump.binがありますファイルとポート7000の結果を公開 –

6

私はプロセスを開始したユーザーとして実行している場合でも、CentOSの上で、この問題を持っていました。何が私のために解決したのは、jmapユーティリティを提供するパッケージに対応するdebuginfoパッケージをインストールすることでした。

debuginfoパッケージをインストールするには、this answer(javaパッケージをglibcに置き換えてください)を参照してください。 debuginfo-installユーティリティを取得/使用し、CentOS-Debuginfo.repoが正しく設定されて有効になっていることを確認する必要があります。

+0

CentOS 7でも同じ問題があります。 http://debuginfo.centos.org/7/x86_64/からパッケージをダウンロードし、 'rpm -ivh java-1.8.0-openjdk-debuginfo * .rpm'を使って手動でインストールしました。ありがとうございました! – xonya

8

AWS ElasticBeanstalkインスタンスでjmapを実行しようとすると同じ問題が発生しました。それは

sudo debuginfo-install java-1.8.0-openjdk-devel

ところで、jmapは、コマンド

sudo yum install java-1.8.0-openjdk-devel-1.8.0.91-0.b14.10.amzn1.x86_64

関連する問題