1

当社の製品は、Windows 上の JRE (JDK なし) のみを使用して、顧客のサーバー上で実行されます。

フラグを介して OutOfMemoryError のヒープ ダンプを取得できることはわかっています。

ただし、JRE JVM プロセスから事前にヒープ ダンプを取得する方法はありますか?

健全なヒープ ダンプをいくつか取得し、それらを OutOfMemoryError で取得したヒープ ダンプと比較することを計画していました。

できれば、顧客にこのツール/ユーティリティをダウンロードしてもらい、サーバー上で実行して自由にヒープ ダンプを取得できるようにする必要があります。

jvisualvmを試してみましたが、jvisualvm には当社の製品 jVM が表示されませんでした。その時点で実行されている JVM の一部のみがリストされ、その時点で実行されているすべての JVM がリストされるわけではありません。さらに、jvisualvm は非常にかさばります。

PS: ヒープをダンプするために JVM のホストで実行できるサードパーティのユーティリティはありますか? また、お客様はこの時点で JRE をアップグレードすることはできません。そして、前の質問に対する回答はどれも回答として選択されていません!

ありがとうございました、

4

1 に答える 1

2
  1. JVM 内からヒープをダンプするには、以下を使用しますcom.sun.management.HotSpotDiagnosticMXBean

        HotSpotDiagnosticMXBean hs =
                ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
        hs.dumpHeap("/path/to/heapdump.bin", false);
    
  2. 外部から別のプロセスのヒープをダンプするには、HotSpot Dynamic Attach メカニズムを使用します。
    そのための小さなユーティリティを作成しました。 https://github.com/apangin/jattachを参照してください。

    でプログラムをビルドしてmake実行する

    jattach <PID> dumpheap /path/to/heapdump.bin
    
于 2016-03-29T13:44:00.340 に答える