- - PR -
Tomcat使用時のheap設定について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を維持したいのですが、何か方法はありますでしょうか? ・・・というか、この比率って変動するものなのでしょうか? ※ずっと固定だと思ってました…。 | ||||||||
|
投稿日時: 2008-10-24 10:43
J2SE 5.0 の Server VM から変動するようになりました。 -XX:+UseAdaptiveSizePolicy がデフォルトになったので変動します。 どういう動作をするかは http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/vm/gc-ergonomics.html を参照してください。 変動させたくないのであれば、-XX:-UseAdaptiveSizePolicy にすればいいのですが、
この割り当て比率はちょっと尋常ではないと思います..... 個人的には、エルゴノミクスでサイズ調整してくれるほうがいいと思ってます。 | ||||||||
|
投稿日時: 2008-10-24 12:10
さくらば様
ご教示ありがとうございます。 知識が古かったようです……。 比率に関してはある程度大きく取らないとgc10回程でSurvivorが溢れて Old行きという状態があった為、この値にしてみました。 そして困った事に期待通り(勉強不足だったわけですが)の値にならず、 Eden:1GB に Survivor:20MB という状態になってしまい、 当然Survivorから溢れてOldへ流れ、1GBのOldも即座に溢れて、 FullGCが毎時間という状況になってました orz まずは-UseAdaptiveSizePolicyにて期待通りの動きをする事を確認した後、 heapの割り当てについては見直しをしたいと思います。 本当にありがとうございました。 |
1