15

多くのクラスのアンロードが見られ、その期間中にシステム全体がハングします..

[Unloading class sun.reflect.GeneratedMethodAccessor117]
[Unloading class sun.reflect.GeneratedConstructorAccessor1896]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor485]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor579]
.... // about 1700 of them

同時に、パーマスペースにスパイクが見られないため、GC イベントではないようです。

次のことを知りたい

コンカレント マーク スイープ コレクションは、世界を止めるイベントですか?

パーマスペースがいっぱいでなくても起こりますか?

4

3 に答える 3

5

CMSは「イベント」ではありません。ガベージコレクターです。CMS には、すべてが停止するフェーズがいくつかありますが、通常の状況では、これらは非常に短い (数ミリ秒) です。一般に、長い一時停止が発生した場合は、CMS が (設定された制約内で) ガベージ生成の速度に追いつくことができず、JVM が "ストップ・ザ・ワールドである「マークスイープ」コレクター… 。

JVM によってはフル GC が発生したときにのみ permgen が収集され、permgen が GC されたときにのみクラスが収集/アンロードされる場合があります。

しかし、クラスのアンロードが長い一時停止の原因であると推測することはできません。実際、GC 統計で permgen がいっぱいになっていないと示されている場合は、その逆である可能性が高くなります。

クラスのアンロードのロギングが「世界を止める」問題を引き起こしている可能性もあります: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6637203を参照してください


所見:

  • 動的に作成されたクラスのアンロードに関する何千ものメッセージがある場合は、システムのアーキテクチャを調べます。プロキシ クラスを使いすぎていませんか?

  • Java 8 では、permgen がなくなり、メタスペースに置き換えられました。アップグレードすると、問題緩和される場合があります。

于 2014-01-20T10:36:04.293 に答える
1

通常、perm GC ではハングアップの問題は発生しません。

その理由は、Perm は通常、アプリケーション内のすべてのクラスがロードされた後に安定するためです。ハングアップの結果である可能性があります。つまり、JVM に十分なメモリがない場合です。Full-GC を試みます。フル GC の一部として、Perm は GC されます。

ご質問について CMSはFull GCも作っています。フルGCの数を減らすだけです。マイナー GC 中に、古いメモリ領域も収集します。

私の意見では、ヒープ メモリに問題があり、フル GC が発生してハングの問題が発生する可能性があります。したがって、Visual JVM ツールまたはある種の GC ログ分析を使用してメモリ使用量を確認する必要があります。古いメモリ領域がいっぱいで、JVM がそれを GC しようとしたことがわかる場合があります。しかし、十分なメモリが解放されず、 gc を再試行します。そして再試行再試行...など。

メモリリークが発生している可能性があると思います。問題。そのため、GC ログ分析を行うことをお勧めします。メモリ リークの問題である場合は、ヒープ ダンプを取得して分析する必要があります。

于 2014-01-20T13:39:09.763 に答える