web-dev-qa-db-ja.com

Javaヒープダンプエラー-メタデータはポリモーフィックではないようです

実行中のJavaプロセスからヒープダンプを取得しようとすると、このStacktraceを取得します。これを引き起こす原因と、適切なヒープダンプを作成するために何をする必要がありますか?

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 Runtime Environment(build 1.8.0_31-b13)OpenJDK 64-Bit Server VM(build 25.31-b07、混合モード)

psに署名して、使用されているJavaバージョンを確認します。

/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
28
RobAu

わかった。

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

私の場合:

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

このJDKバグに関連しているようです: https://bugs.openjdk.Java.net/browse/JDK-807577

31
RobAu

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

Sudo debuginfo-install Java-1.8.0-openjdk-devel

ところで、jmapはコマンドでAWS ElasticBeanstalkインスタンスにインストールされました

Sudo yum install Java-1.8.0-openjdk-devel-1.8.0.91-0.b14.10.amzn1.x86_64

11
Nan Zhong

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

Debuginfoパッケージをインストールするには、 この回答 (glibcの代わりにJavaパッケージを使用))を参照してください。debuginfo-installユーティリティを取得/使用し、- CentOS-Debuginfo.repo が正しくセットアップされ、有効になっています。

7
PeteyPabPro

Ubuntuでは、openjdk-dbgパッケージをインストールすることでこの問題を解決しました。

Sudo apt-get install openjdk-8-dbg

バグを修正したバージョンにjdkをアップグレードすることで、これで問題が間接的に解決されたと思われます。次の方法でこの問題を解決できる場合があります。

 Sudo apt-get install openjdk-8

注: Javaをアップグレードした後、適切なダンプを取得するには、Javaプロセスを再起動する必要があります。 t、次のようなものが得られます。

Attaching to process ID 21957, please wait...
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:498)
    at Sun.tools.jmap.JMap.runTool(JMap.Java:201)
    at Sun.tools.jmap.JMap.main(JMap.Java:130)
Caused by: Sun.jvm.hotspot.debugger.UnmappedAddressException: 7f21453c9bf8
    at Sun.jvm.hotspot.debugger.PageCache.checkPage(PageCache.Java:208)
    at Sun.jvm.hotspot.debugger.PageCache.getData(PageCache.Java:63)
    at Sun.jvm.hotspot.debugger.DebuggerBase.readBytes(DebuggerBase.Java:225)
    at Sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.readCInteger(LinuxDebuggerLocal.Java:498)
    at Sun.jvm.hotspot.debugger.linux.LinuxAddress.getCIntegerAt(LinuxAddress.Java:69)
    at Sun.jvm.hotspot.HotSpotTypeDataBase.getLongValueFromProcess(HotSpotTypeDataBase.Java:604)
    at Sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.Java:164)
    at Sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.Java:89)
    at Sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.Java:395)
    at Sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.Java:305)
    at Sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.Java:140)
    at Sun.jvm.hotspot.tools.Tool.start(Tool.Java:185)
    at Sun.jvm.hotspot.tools.Tool.execute(Tool.Java:118)
    at Sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.Java:83)
    ... 6 more
1
Zeki