フルGC調査プロセス原因メタスペース

メタスペース領域を有するJDK8代わりに前の永久的なゾーンで、この地域の主記憶クラス情報がロードされて、私の手あなたがアイデアをトラブルシューティング、fullgcを伴うことになるプロジェクトを、起動するたびに:

まず、ビューのメモリ使用量

コマンド:ここではPID、PID -gcutil JSTATは、そのJavaプロセスIDです

あなたは、古い年の利用率が唯一の1.96パーセントですが、使用率が96.13パーセントのメタスペースの面積であり、最初は小さすぎる設定メタスペースの領域であると疑わ見ることができます。

 

第二には、(あなたが印刷GC情報を設定することができますJVMパラメータ)をログGCを表示します

古い年の使用を回復するためにCMSゴミプロジェクトの回収期間、fullgc段階におけるCMSのゴミ回収を分けることができます:

初期ラベル(STW) - >並行マーク - >並行前洗浄 - >(STW)をマーキング - >同時クリーニング - >リセットが、スクリーンショットは、ログの分析以下、フルfullGCプロセスにマップされます。

1は、位置マーカである[ParNew:218582K-> 15126K(235968K)、0.0166181秒]、新世代のガベージコレクションが218582K前占有ことフレーズ手段は、正常であり、0.0166181がかかり、15126K、235968Kの総容量を占有回収しましたマイナーGC

情報マーク2は、GCヒープ占有218582K、前文全体が15126K、約20%の量がfullgc登場したときに言うことです1022400Kの合計サイズを、回復していることを意味し、218582K-> 15126K(1022400K)非常に疑わしいです地元のマーク3はまた、スタック全体の使用は非常に低い示しています。

ログからのGCの情報は類似しており、それは問題ではないヒープ。

 

トリガーfullgcに知られている条件は以下のとおりです。

旧のスペース - 除外

メタスペースエリアにjdk8ある永久スペースの不足、と

時間GCでのCMSの登場プロモーション失敗と並行モードの故障

プロモーションは、オブジェクトの新しい世代がfullgcの古いスペースが不足しているトリガー、古い時代に昇格するとき、これは除外することができることを意味しませんでした

concurrent mode failure 是指CMS在进行老年代垃圾回收时,由于CMS在gc时为了减少STW停顿时间,采用用户线程和垃圾回收线程并行执行的方式,所以此时用户线程还是会产生内存对象,这些对象就是浮动对象,如果此时有浮动对象晋升到老年代,而老年代空间不足时,就会触发concurrent mode failure,导致JVM不得不停止用户线程来进行fullgc,这时候就会STW,而我这边的老年代空间充足,可以排除。

 

这样基本可以确定是metaSpace问题

 

任何一个JVM参数的默认值可以通过java -XX:+PrintFlagsFinal -version |grep JVMParamName获取,例如:java -XX:+PrintFlagsFinal -version |grep MetaspaceSize

发布了19 篇原创文章 · 获赞 3 · 访问量 9583

おすすめ

転載: blog.csdn.net/pinghuqiuyue9/article/details/103964954