塩焼きブログ

塩焼きに関しての研究内容を公開しています

JavaのコンカレントGCとParallelGCThreadsについて

メモリを大量に消費するアプリケーションでFull GCが頻繁に発生し、CPUの高負荷状態、表示の遅延などの問題が発生した。

Full GCによる表示の遅延の改善にはコンカレントGCを採用することで解決した。コンカレントGCを使用するには起動オプションで-XX:+UseConcMarkSweepGCを指定する。

java -XX:+UseConcMarkSweepGC -jar /app.jar

Full GCが起きた時のCPUの高負荷状態はCPUのコアを全て使うことが原因だったので、GCを並列実行するスレッドの数を起動オプションに-XX:ParallelGCThreads=2を加えて抑えることで解決した。

java -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=2 -jar /app.jar

GCについての調査はjstatを使って行った。Full GCの発生回数、トータルの停止時間はjstatで確認できる。jpsコマンドで稼働中のプロセスIDを確認し、jstatの引数に渡すことでアプリケーションのGCの状況等が確認できる。

$ jps
28815 Jps
27493 
27434 Main
jstat -gcutil -t 1 1000

参考