1

jmap を使用してヒープ ダンプを取得しようとしていますが、NPE が発生し続けます。私は Oracle の Java7 jdk を使用しています (詳細は後述)。

$sudo jmap -F -dump:format=b,file=heap.bin 21966

Attaching to process ID 21966, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
Attaching to process ID 21966, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
Dumping heap to /tmp/dumps/2015-02-18T13:24:36Z-heap.bin ...
Exception in thread "main" java.lang.reflect.InvocationTargetException
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at sun.tools.jmap.JMap.runTool(JMap.java:197)
  at sun.tools.jmap.JMap.main(JMap.java:128)
Caused by: java.lang.NullPointerException
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeSymbolID(HeapHprofBinWriter.java:905)
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeFieldDescriptors(HeapHprofBinWriter.java:743)
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeClassDumpRecord(HeapHprofBinWriter.java:511)
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter.access$000(HeapHprofBinWriter.java:297)
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter$1.visit(HeapHprofBinWriter.java:446)
  at sun.jvm.hotspot.memory.SystemDictionary$2.visit(SystemDictionary.java:179)
  at sun.jvm.hotspot.memory.Dictionary.classesDo(Dictionary.java:69)
  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.writeClassDumpRecords(HeapHprofBinWriter.java:443)
  at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:413)
  at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:56)
  at sun.jvm.hotspot.tools.Tool.start(Tool.java:221)
  at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)


$java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

誰もこれを見たことがありますか?グーグルは OpenJDK ( https://bugs.openjdk.java.net/browse/JDK-8028623 ) の問題を提起しますが、Oracle JDK に同じ問題があるかどうかはわかりません。

4

1 に答える 1

4

はい、まったく同じ問題への正しいリンクが見つかりました。
JDK 7u72 で修正されました。

ところで、-Fオプションはjmapまったく異なる方法で機能します。

  • -Fjmap を使用しない場合、Dynamic Attach メカニズムを使用してターゲット JVM に接続し、JVMプロセス内から独自にダンプを生成するよう JVM に要求します。
  • -Fjmap を使用すると、 Serviceability Agentを使用してターゲット JVM プロセスを一時停止し、そのメモリをリモートで読み取り、すべての作業を別のプロセスで実行します。SA はクールで強力なツールですが、最新の JVM 実装の詳細と 100% 互換性があるように十分に維持されているわけではありません。そのため、SA で問題が発生することは珍しくありません。
于 2015-02-18T20:05:25.630 に答える