メタスペース領域を有する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