JVMクイックチューニングマニュアルの5:ParNewコレクタ+CMSコレクタの製品ケーススタディ(応答時間優先)
5283 ワード
一.サーバ:
-デュアルコア、4つのcores;16G memory
[root@alish2-cassandra-01 ~]# cat /proc/cpuinfo | grep "cpu cores"
cpu cores : 2
cpu cores : 2
二.式の簡単な説明:
応答時間優先のコンカレントコレクタは,主にシステムの応答時間を保証し,ごみ収集時の停止時間を低減する.アプリケーションサーバ、電気通信分野などに適しています.
1.ParNewコレクタ:ParNewコレクタはSerialコレクタのマルチスレッドバージョンであり、サーバモードで実行される仮想マシンで優先される新世代コレクタの多くは、Serialを除いてCMSコレクタと連携できるだけです.
2.CMSコレクター:CMS、全称Concurrent Low Pause Collector、jdk 1.4後期バージョンから導入された新しいgcアルゴリズムはjdk 5とjdk 6でさらに改良された.
その主な適合シーンは応答時間の重要性に対する需要がスループットに対する要求より大きく、ゴミ回収スレッドと応用スレッドがプロセッサ資源を共有することに耐えられる.
また,アプリケーションには比較的多くの長寿命周期のオブジェクトのアプリケーションが存在する.CMSはtenured generationの回収、すなわち年老いた世代の回収に用いられ、アプリケーションの一時停止時間をできるだけ減らし、FullGCの発生確率を減らし、アプリケーションスレッドと並行するゴミ回収スレッドを利用して年老いた世代の除去をマークすることを目標としている.
CMSは一時停止していないのではなく、シリアルタグ整理アルゴリズムの長い一時停止の代わりに2回の短い停止を使用し、その収集サイクルはこのようになっている.
(CMS-initial-mark) -> (CMS-concurrent-mark)->
(CMS-remark) -> (CMS-concurrent-sweep) ->
CMS (CMS-concurrent-reset)。
そのうちの1,3の2つのステップは、すべてのアプリケーションスレッドを一時停止する必要があります.rootオブジェクトから生存をマークするオブジェクトを最初に一時停止し、この段階を初期マークと呼ぶ.2回目の一時停止は、同時タグの後、すべてのアプリケーション・スレッドを一時停止し、同時タグ・フェーズの欠落したオブジェクトを再タグします(同時タグ・フェーズの終了後にオブジェクトのステータスが更新されます).1回目の一時停止は短く、2回目の一時停止は通常長く、remarkのこの段階は並列にマークすることができます.
同時タグ、同時パージ、同時リセット段階のいわゆる同時実行とは、1つ以上のゴミ回収スレッドとアプリケーションスレッドが同時実行され、ゴミ回収スレッドはアプリケーションの実行を一時停止しません.1つ以上のプロセッサがある場合、同時収集スレッドはアプリケーションスレッドとは異なるプロセッサ上で実行されます.このようなオーバーヘッドはアプリケーションのスループットを低下させることは明らかです.Remarkフェーズのパラレルとは、すべてのアプリケーションを一時停止した後、一定数のゴミ回収プロセスを起動してパラレルタグを行い、このときのアプリケーションスレッドは一時停止します.
三.数式:
($TOMCAT_HOME/bin/catalina.sh)
export JAVA_OPTS="-server -Xmx10240m -Xms10240m -Xmn3840m -XX:PermSize=256m
-XX:MaxPermSize=256m -Denv=denalicnprod
-XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=1048576
-XX:+DisableExplicitGC
-XX:+UseParNewGC -XX:ParallelGCThreads=10
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark -XX:ParallelCMSThreads=10
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
-XX:+UseFastAccessorMethods
-XX:LargePageSizeInBytes=128M
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -Xloggc:gc.log -verbose:gc"