Archive for 3月, 2010

3月 10th, 2010

FullGC発生時のログ考察

Posted in Java, Tomcat by admin

 コンカレントGCの注? ? の? きのような内容ですが、コンカレントGCも含む各稜 Javaチューニングオプションを採用したTomcatぜ GC処理を調査してみました。Sun jdk1.6.0ぜ Tomcat6を使用し、メモリを確? ・枯朸 させるだけのテストサーブレットを動作させています。メモリ確保ぜ 128Mのヒープサイズに対しぜ 2度に分けて? OutOfMemoryErrorを起こさない程府 50M×2回)メモリを枯朸 させ、? 図的ぜ FullGCを発生させるように試験しています。

NoCMS(コンカレントGC無劜 )
-Xms128m
-Xmx128m
NoCMS Parallel(コンカレントGC無効、パラレボ GC指定のぜ )
-Xms128m
-Xmx128m
-XX:+UseParallelGC
-XX:+UseParallelOldGC
CMS(コンカレントGC有劜 )
-Xms128m
-Xmx128m
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
CMS NewTune(コンカレントGC有効、New世代チューニングあり)
-Xms128m
-Xmx128m
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:NewSize=42m
-XX:MaxNewSize=42m
-XX:SurvivorRatio=2
-XX:MaxTenuringThreshold=32
-XX:TargetSurvivorRatio=90

 Xloggcオプションで圏 得したGCログでは、コンカレントGC実行時ぜ FullGCの発生を昜 示的ぜ “FullGC”と示さないので読み圏 ることが難しいのですが、jstatであれぜ “FullGCイベント”としてカウントしてぜ れます。jstatから圏 得した以? の情報より、FullGCの処理時間はコンカレントGC無効の場合よりも少しだけ劣化していますが、アプリケーションスレッドが並? 稼働出来ることを考えれば? 能的に有効だと思゜ れます。

?  FullGCイベント
	NoCMS			1回	0.044秒
	CMS				3回	0.058秒(計)
	CMS NewTune		3回	0.058秒(計)

?  Young世? GCイベント
	NoCMS			2回	0.007秒(計)
	CMS				2回	0.034秒(計)
	CMS NewTune		1回	0.007秒
GCGraph

GCGraph

 GCGraph図は、FulGC発生時ぜ jstat出力結果をグラフ化したものです。4つのグラフとも約半分の地点で各領域のサイズが大きく変動していますが、ここがFullGCが発生したポイントです。「NoCMS」と「NoCMS Parallel」に違いが見られないのは、「UseParallelGC」がServerVMのデフォルトオプションだからのようです。従って? 段同士の? 較は? 味がないです・・。上下段ぜ CMSあり・なしで? 較した場合、FUllGCが発生する前の段障 、「CMS」と「CMS NewTune」ぜ CMSありの場合ぜ EDEN領域が初期状態での利用? が高い事が゜ かります。以? ぜ CMSあり・なしぜ “ヒープサイズ領域の内? “を見ててみると? 際にぜ CMSなしの場合の方がEDEN領域は? ぜ とられていますので、単純ぜ CMS機能有効時は初期状態でオブジェクトが多ぜ 生成される為なのかもしれません。コンカレントGCでぜ GC専用のスレッドが常時処理を行うためスループットが作 いのが問題となりますが、このスレッドによるものの可能性もあります。CMSあり・なし時に? られるおもなスレッドの相違も載せておきます。

?  ヒープサイズ領域の内?
	NoCMS		EDEN:32MB FROM: 5M TO: 5M OLD:86M
	CMS			EDEN:16MB FROM: 2M TO: 2M OLD(CMS):108M
	CMS NewTune	EDEN:20MB FROM:10M TO:10M OLD(CMS):88M
?  CMSあり・なしスレッド相違
	NoCMS
	"GC task thread#0 (ParallelGC)" prio=10 ・・ボ  runnable

	CMS
	"Surrogate Locker Thread (CMS)" daemon prio=10 ・・ボ  waiting on condition
	"Gang worker#n (Parallel GC Threads)" prio=10 ・・ボ  runnable
	"Concurrent Mark-Sweep GC Thread" prio=10 ・・ボ  runnable
	"Gang worker#n (Parallel CMS Threads)" prio=10 ・・ボ  runnable