18

Java 8 は、動的に拡張できるメタスペースを使用します。メタスペースがいっぱいになると、GC はメタスペースで実行されます。それは、GC がメタスペースで実行されないということですか?

Java 8 アプリケーションが大量のメモリを使用しています。実行時のメタスペースのサイズを知りたいです。それ、どうやったら出来るの?

設定を考えていますMaxMetaspaceSize。何に設定すればよいですか?推奨事項はありますか?

4

3 に答える 3

21

オプション1:

実行する

jstat -gc PID

(PID は監視する JVM の PID に置き換えられます) sth を返します。お気に入り:

S0C      S1C       S0U   S1U     EC       EU        OC         OU        MC       MU       CCSC    CCSU       YGC   YGCT     FGC    FGCT    GCT
103936.0 107008.0  0.0   41618.3 820736.0 401794.3  444928.0   183545.7  181888.0 137262.8 28544.0 20386.6    313   16.024   8      3.706   19.729

これによると、興味深いのは次のとおりです。

MC: Metaspace capacity (kB)
MU: Metaspace utilization (kB)

したがって、この場合、約 181 MB のメタスペースがコミットされ、現在 137 MB が使用されています。

オプション 2:

ガベージ コレクション ログを有効にしている場合は、アプリケーションが既にクラッシュした後や問題が報告された後など、そこからこれを見つけることもできます。次のような行を検索します

2016-04-06T01:50:04.842+0200: 7.795: [Full GC (Metadata GC Threshold)
[PSYoungGen: 7139K->0K(177152K)]
[ParOldGen: 18396K->22213K(101888K)] 25535K->22213K(279040K), 
[Metaspace: 34904K->34904K(1081344K)], 0.1408610 secs]
[Times: user=0.45 sys=0.00, real=0.14 secs]

これは、前のしきい値に達したため、メタスペースのサイズ変更を構成します。

[Metaspace: 34904K->34904K(1081344K)], 0.1408610 secs]

関連情報が含まれています: 34,9mb は GC の前後に使用されました。見つけることができるこれらのログ エントリの最新のものは、現在のサイズ (つまり、GC 後) を示します。

メタスペースのサイズが変更されるたびにフル GC が実行されることに注意してください。そのため、デフォルト値の ~21mb (ホストの構成によって異なります) では不十分であることがわかっている場合は、適切な開始値を構成することをお勧めします。

メタスペース サイズの調整の詳細については、こちらを参照してください。

于 2016-04-07T09:09:46.643 に答える
16
for (MemoryPoolMXBean memoryMXBean : ManagementFactory.getMemoryPoolMXBeans()) {
    if ("Metaspace".equals(memoryMXBean.getName())) {
            System.out.println(memoryMXBean.getUsage().getUsed()/1024/1024 + " mb");
    }
}

はい、MaxMetaspaceSize監視して修正するのが漏れていると思われる場合は、設定することをお勧めします。

于 2015-06-23T18:20:52.293 に答える
3

jcmd を使用します。これは、Java 8 でこのようなものを見つけるための最適な組み込みのオラクル ツールです。ターミナルから...

注: Java プロセスを開始したユーザーとして jcmd を実行する必要があります。Jetty のような Web サーバーをデバッグしている場合は、ユーザーを のように変更する必要があるかもしれませんsudo su jetty

  1. 走るjcmd
  2. アプリに表示された PID を取得して実行しますjcmd <pid> VM.native_memory ここに画像の説明を入力
  3. より多くのオプションを実行するにはjcmd <pid> help
于 2017-04-13T22:00:50.997 に答える