.log(ぽちろぐ)

退屈しているおっさんの日記

Tomcatの起動引数設定。メモリサイズとか。

本記事の情報は古いです。参考程度にとどめてください。
tomcat7で試した最新版はこちら
blog.tomorrow-japan.com


    現象

     TomcatにS2アプリケーションを配備して、とやってるとたまに、PermGen spaceを発生してTomcatが無反応になる。復旧はtomcat再起動しかない。

    回避

     PermGen spaceを発生させない方法はなにかないか、と探す。

     (CATALINA_HOME)/bin/setenv.sh
    を作る。
     CentOSでは、startup.shと同ディレクトリに、setenv.shを配備しておくと、Bootstrapが読みこんでくれるんだとさ。

     記述内容はgeek.confを参考に以下書いた。
    expot CATALINA_OPTS="-server -verbose:gc -XX:+PrintGCTimeStamps -Xmx512M -Xms512M -Xss64M -XX:NewSize=256M -XX:MaxNewSize=512m -XX:SurvivorRatio=2 -XX:PermSize=128M -XX:MaxPermSize=512M -Xloggc:$CATALINA_HOME/logs/gc.`date '+%Y-%m-%d-%H%M%S'`.log"
    
    • -Xss512Mでやるとtomcat起動しない。64ではOKだった。
    • -XX:NewSize512MではToo small initial heap for new size specified。-XX:NewSize256Mで起動成功。
    • 上記でtomcat起動したけど、apache経由で繋がらなくなったでござる。
    • -Xms512Mが怪しい(でも、記述を消したり付けたりしてたらapache経由で確認できた。ふしぎ!)
    • -XX:PermSize=128Mが怪しい(でも、記述を消したり付けたりしてたらapache経由で確認できた。ふしぎ!)

     これでしばらく様子を見る。ひさしぶりにvi使ったなあ。

    その後

    2012/05/28追記
     上記設定で動かしてると、OutOfMemory頻発する。ちょいちょい弄って、以下で安定したかも。
    expot CATALINA_OPTS="-server -verbose:gc -XX:+PrintGCTimeStamps -Xmx256M -Xms256M -Xss64M -XX:NewSize=1M -XX:MaxNewSize=16m -XX:SurvivorRatio=2 -XX:PermSize=128M -XX:MaxPermSize=128M -Xloggc:$CATALINA_HOME/logs/gc.`date '+%Y-%m-%d-%H%M%S'`.log"
    


    2012/06/01追記
     またまたOutOfMemory発生した。デプロイを頻繁にやった時に。もうちょいいじる。Xmsを縮小して、ヒープMAXに到達するまでの速度を(FullGCの頻度を)下げる狙い。うまくいくといいなー。
    export CATALINA_OPTS="-server -verbose:gc -XX:+PrintGCTimeStamps -Xmx256M -Xms128M -Xss64M -XX:NewSize=1M -XX:MaxNewSize=16M -XX:SurvivorRatio=2 -XX:PermSize=128M -XX:MaxPermSize=128M -Xloggc:$CATALINA_HOME/logs/gc.`date '+%Y-%m-%d-%H%M%S'`.log"
    

    一般にヒープサイズが小さいとGCが頻発してアプリケーションのパフォーマンスが低下します。
    さらに、ヒープサイズが必要量を下回る場合はOutOfMemoryErrorが発生してアプリケーションが停止してしまいます。
    一方、ヒープサイズが大きいと、GCの起動回数は減りますが、GC1回当たりの処理時間、すなわちアプリケーション停止状態が長くなり、アプリケーションの応答時間に問題が出る場合もあります。
    システムの物理メモリのフリー領域が不足するまでヒープサイズを大きくすると、物理メモリからスワップ領域へのページングが起こってしまい、かなりのパフォーマンスが劣化する可能性もあります。

    http://www.atmarkit.co.jp/fjava/rensai3/javavm02/javavm02_2.html

    @IT > チューニングのためのJavaVM講座(後編)

    2012/07/12追記
     tomcat6。(CATALINA_HOME)/bin/setenv.sh
    を配備したものの、tomcat起動後
    # ps aux | grep Xms
    を叩いてみると、反映されていない。/etc/tomcat6/tomcat6.confに直接、CATALINA_OPTSを書いたら反映された。

    検索語

    Seasar2 ブートストラップ トムキャット java メモリ heap ヒープ outOfMemory