openjdkzgcでのCPU使用率が高い

xiaoxxcool

製品環境でzgcを使用しようとしているので、jdkをjdk8からopenjdk 15、tomcat8からtomcat8.5、およびgc関連オプションに更新しましたが、jvmの開始から数時間後にCPU使用率が1000 +%になります(通常のCPU使用率は100〜300%である必要があります)。CPUが高い場合、ログファイルにICBufferFullの安全なポイントが多数あることがあります。

[2020-11-12T19:00:43.669+0800] Safepoint "ICBufferFull", Time since last: 41374119 ns, Reaching safepoint: 2026134 ns, At safepoint: 85993 ns, Total: 2112127 ns
[2020-11-12T19:00:43.672+0800] Safepoint "ICBufferFull", Time since last: 2521598 ns, Reaching safepoint: 1109894 ns, At safepoint: 57235 ns, Total: 1167129 ns
[2020-11-12T19:00:43.676+0800] Safepoint "ICBufferFull", Time since last: 2892867 ns, Reaching safepoint: 1240834 ns, At safepoint: 59633 ns, Total: 1300467 ns
[2020-11-12T19:00:43.681+0800] Safepoint "ICBufferFull", Time since last: 2870110 ns, Reaching safepoint: 1425837 ns, At safepoint: 54052 ns, Total: 1479889 ns

ノードを約30秒間オフラインにすると、CPUがダウンし、次にオンラインにすると、CPUが再びハイになるまで何時間も正常に動作します。ソースコードを確認しました。ICBufferFullは「インラインキャッシュバッファがいっぱいです」という意味ですが、それを増やすオプションが見つかりません。誰かがこれを助けることができますか?ありがとう!

gcオプションは次のとおりです。

export JAVA_OPTS='-Xms10g -Xmx10g -XX:+UseLargePages -XX:ZAllocationSpikeTolerance=5 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=4 -Xss2m -XX:+UseZGC -Xlog:gc,gc+phases,safepoint:file=/logs/gc.log:t:filecount=10,filesize=10m -XX:+HeapDumpOnOutOfMemoryError'

edit1:

別のホストがjdk8で正常に動作し、cmsを参照として使用していますが、2つのホストへの要求はほぼ同じです。

私はそれをasync-profileでプロファイリングしました、最もホットなメソッドはjava/lang/ThreadLocal$ThreadLocalMap.getEntryAfterMiss、50 +%で発生し、最もホットなネイティブメソッドはZMark::try_mark_object(ZMarkCache*, unsigned long, bool)、0.41%のみで発生しました。jdk8とopenjdk15のスレッドローカル関連のソースコードを確認しましたが、変更されていないようです。

edit2:

JIRA同様のバグを見つけました。私のアプリケーションもluceneに関連しており、gcログから、弱参照数が1m以上の場合、使用率が高くなります。したがって、問題は、zgcで弱参照をより積極的に収集する方法です。

edit3:

System.gc()が3秒ごとに呼び出された次のログから、私のアプリケーションは弱参照を生成しすぎたようです。しかし、開始後も生産数が増え続けるのは不思議です。リクエストは11:00〜17:00までほぼ一定です。GC(9821)の後、CPUが600%から400%に自動的に低下したことに注意してください。エンキューされたのは、約250Kです。GC(10265)ノードはオフラインで、キューに入れられたのは約770Kでした。長い間、キューに入れられたカウントが少ないのはなぜですか?オブジェクトが完全に再利用されていないことを意味しますか?

[2020-11-19T11:00:00.245+0800] GC(992) Weak: 155658 encountered, 72334 discovered, 0 enqueued
[2020-11-19T12:00:00.397+0800] GC(2194) Weak: 220462 encountered, 122216 discovered, 1380 enqueued
[2020-11-19T12:00:03.411+0800] GC(2195) Weak: 220598 encountered, 107228 discovered, 677 enqueued
[2020-11-19T13:00:00.497+0800] GC(3395) Weak: 222536 encountered, 82199 discovered, 1713 enqueued
[2020-11-19T14:00:00.647+0800] GC(4613) Weak: 443946 encountered, 291651 discovered, 292 enqueued
[2020-11-19T15:00:01.173+0800] GC(5819) Weak: 338065 encountered, 124351 discovered, 815 enqueued
[2020-11-19T16:00:01.283+0800] GC(7022) Weak: 459070 encountered, 298932 discovered, 353 enqueued
[2020-11-19T17:00:01.426+0800] GC(8222) Weak: 688162 encountered, 519369 discovered, 4648 enqueued
[2020-11-19T16:00:01.283+0800] GC(7022) Weak: 459070 encountered, 298932 discovered, 353 enqueued
[2020-11-19T17:00:01.426+0800] GC(8222) Weak: 688162 encountered, 519369 discovered, 4648 enqueued
[2020-11-19T18:00:01.556+0800] GC(9430) Weak: 1078757 encountered, 928748 discovered, 1691 enqueued
[2020-11-19T18:18:43.595+0800] GC(9821) Weak: 1022080 encountered, 841168 discovered, 247352 enqueued
[2020-11-19T18:18:46.592+0800] GC(9822) Weak: 774253 encountered, 568564 discovered, 3938 enqueued
[2020-11-19T18:40:49.616+0800] GC(10265) Weak: 842081 encountered, 788825 discovered, 767288 enqueued
[2020-11-19T18:40:52.593+0800] GC(10266) Weak: 74876 encountered, 18186 discovered, 1 enqueued
フランチェスコメンザニ

最新のGCは、到達しにくいオブジェクトの収集を遅らせます。

によってトリガーされるコレクションは、System.gc()常に到達不能なオブジェクトを処理し、デフォルトで同時実行されるため、メソッドを呼び出す定期的なタスクを実装できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JenkinsのCPU使用率が高いKhugepageds

分類Dev

javafxでの高いCPU使用率

分類Dev

Azure StorageEmulatorでのCPU使用率が高い

分類Dev

CPU高温12.10、CPU使用率が高い

分類Dev

CPU高温12.10、CPU使用率が高い

分類Dev

Intellij IDEA 2016.2 CPU使用率が高い

分類Dev

Intellij IDEA 2016.2 CPU使用率が高い

分類Dev

Intellij IDEA 2016.2 CPU使用率が高い

分類Dev

VsCode Server、CPU使用率が高い

分類Dev

SpriteKitの非常に高いCPU使用率

分類Dev

Mysqlの高いCPU使用率(600%以上)

分類Dev

mysqlの高いCPU使用率(280%)

分類Dev

Filezillaの高いCPU使用率

分類Dev

Windows8.1の高いCPU使用率

分類Dev

crondの高いCPU使用率

分類Dev

kcompactd高いCPU使用率

分類Dev

SMBD高いCPU使用率

分類Dev

Ubuntu 18.04.1 LTS の CPU 使用率が高く、実行が遅い

分類Dev

Ubuntu16.10の「kidle_inject / x」のCPU使用率が高い

分類Dev

休止状態後のGnomeShellのCPU使用率が高い

分類Dev

WindowsよりもUbuntuのCPU使用率が高い

分類Dev

HashSetとArrayListのCPU使用率が高い

分類Dev

PowershellスクリプトのCPU使用率が高い

分類Dev

Windows7-アイドル時のCPU使用率が高い

分類Dev

開発環境でのNuxtjsの高いCPU使用率

分類Dev

Visual Studio2013でのIISの高いCPU使用率

分類Dev

MONO4.6.2サーバーでの高いCPU使用率

分類Dev

Windows10での高いCPU使用率

分類Dev

Minecraftsystemdサービスでの高いCPU使用率