レイテンシーを最適化しようとしているアプリケーションがあり、フル GC に費やされる平均時間を短縮したいと考えています。「XX:+UseParallelGC」を使用すると、次のようになります。
[myhost ~]$ /usr/local/jdk7/bin/jstat -gcutil 9793 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 49.57 95.93 93.32 99.48 10086 390.628 387 1005.334 1395.962
56.99 0.00 7.42 93.32 99.48 10087 390.691 387 1005.334 1396.025
56.99 0.00 22.19 93.32 99.49 10087 390.691 387 1005.334 1396.025
56.99 0.00 36.28 93.32 99.49 10087 390.691 387 1005.334 1396.025
[myhost ~]$ ps -p 9793 -o etime=
4-12:40:52
「-XX:+UseParNewGC -XX:+UseConcMarkSweepGC」の使用に切り替えると、より多くのフル GC が表示されます。
[myhost]$ /usr/local/jdk7/bin/jstat -gcutil 2514 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.20 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.19 716 28.151 24 44.250 72.401
0.00 100.00 100.00 99.62 24.19 716 28.151 24 44.250 72.401
0.00 0.00 5.92 99.44 24.19 716 28.151 24 56.361 84.512
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 100.00 99.66 24.19 718 28.221 26 56.417 84.638
100.00 0.00 34.98 99.87 24.20 720 28.319 27 68.708 97.026
100.00 0.00 100.00 99.87 24.20 721 28.319 28 68.708 97.026
100.00 0.00 100.00 99.87 24.20 721 28.319 28 68.708 97.026
100.00 0.00 100.00 99.87 24.20 721 28.319 28 68.708 97.026
100.00 0.00 100.00 99.87 24.20 721 28.319 28 68.708 97.026
これがヒープ設定です。
-Xms256m -Xmx8192m -XX:PermSize=128m -XX:MaxPermSize=1024m
JDKを使用しています:
[myhost ~]$ /usr/local/jdk7/bin/java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=261346688 -XX:MaxHeapSize=4181547008 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:+UseParallelGC
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
最初のインスタンスの稼働時間は 4 日以上です。2 番目のインスタンスは数分間しか稼働していませんでした。頻繁にフル GC を実行して大きな一時停止をしていることに気付いたので、設定を元に戻しました。
GC の統計が壁から外れないようにするには、ここで何を調整する必要がありますか?