- PR -

Tomcat使用時のheap設定について

1
投稿者投稿内容
SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2008-10-24 08:24
質問をさせて下さい。
LinuxにてJDK1.6.0.10、tomcat6.0.18にて環境を構築しました。
heapの割り当てで全体で2GB、うちNew領域に1GBを割り当て、
その中でEdenに512MB、Survivorに256MBずつ割り当てをしようと考えました。
で、以下のオプションにて起動をしております。
CATALINA_OPTS="-Xms2048m -Xmx2048m -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=64 -XX:PermSize=128m -XX:MaxPermSize=128m"

起動直後にjstat -gcnewcapacityで確認をすると、以下の通りであり、
期待通りの設定となっております。
Timestamp NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
17.8 1048576.0 1048576.0 1048576.0 262144.0 262144.0 262144.0 262144.0 1048448.0 524288.0 2 1

が、しばらくするとNew領域事体のサイズは変わらないのですが、Edenが膨れ、
Survivorが小さくなっております。
Timestamp NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
10037.2 1048576.0 1048576.0 1048576.0 11584.0 262144.0 262144.0 11328.0 1048448.0 1025664.0 314 2

SurvivorRatioの2:1:1を維持したいのですが、何か方法はありますでしょうか?
・・・というか、この比率って変動するものなのでしょうか?
※ずっと固定だと思ってました…。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2008-10-24 10:43
引用:

SurvivorRatioの2:1:1を維持したいのですが、何か方法はありますでしょうか?
・・・というか、この比率って変動するものなのでしょうか?
※ずっと固定だと思ってました…。



J2SE 5.0 の Server VM から変動するようになりました。
-XX:+UseAdaptiveSizePolicy がデフォルトになったので変動します。
どういう動作をするかは
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/vm/gc-ergonomics.html
を参照してください。

変動させたくないのであれば、-XX:-UseAdaptiveSizePolicy にすればいいのですが、

引用:

その中でEdenに512MB、Survivorに256MBずつ割り当てをしようと考えました。



この割り当て比率はちょっと尋常ではないと思います.....
個人的には、エルゴノミクスでサイズ調整してくれるほうがいいと思ってます。
SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2008-10-24 12:10
さくらば様
ご教示ありがとうございます。

知識が古かったようです……。
比率に関してはある程度大きく取らないとgc10回程でSurvivorが溢れて
Old行きという状態があった為、この値にしてみました。

そして困った事に期待通り(勉強不足だったわけですが)の値にならず、
Eden:1GB に Survivor:20MB という状態になってしまい、
当然Survivorから溢れてOldへ流れ、1GBのOldも即座に溢れて、
FullGCが毎時間という状況になってました orz

まずは-UseAdaptiveSizePolicyにて期待通りの動きをする事を確認した後、
heapの割り当てについては見直しをしたいと思います。

本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)