【Tomcat】 Tomcat のメモリあれこれ

Tomcatボトルネックの探し方

* JVM の現状を確認する
 => Tomcat は、 Java製 で、JVM上で動いているので。

JVM の現状を確認するには...

【1】jps コマンド ... 起動中のJVMプロセスを一覧表示
【2】jstatコマンド ... JVMのメモリ状況を表示

コマンド例

# jps コマンドを実行
jps
4309 Bootstrap <= Tomcat のプロセスを表示
...

# jstat コマンドを実行
jstat -gcutil 4309
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00  97.02  70.31  66.80  95.52  89.14      7    0.300     0    0.000    0.300
...

補足

* S0/S1 : Survivor領域
* E : Eden領域
* YGC/YGCT : GC / そのかかった時間
* FGC/FGCT : Full GC / そのかかった時間 << ★

★が頻発すると黄色信号

 ■ メモリ最大/初期使用量を設定する

 * CATALINA_OPTSに以下の設定に明示的に値を指定する
  + -Xms:メモリ初期使用量(ヒープ領域起動時(JVM起動時)のサイズ)
  + -Xmx:メモリ最大使用量(ヒープ領域の最大サイズ)

  + -XX:NewSize:New領域のサイズ
  + -XX:MaxNewSize:New領域の最大サイズ
  + -XX:SurviorRation=:From/To領域の使用比率
  + -XX:MaxTenuringThreshold:New領域からOld領域に移動する閾値
  + -XX:TargetSurvivorRatio:Survior領域の閾値

設定変更

 * 具体的には、
 $CATALINA_HOME/bin/setenv.bat (Windows)、setenv.sh (Linux)
 を作成し、指定する (以下の「設定例」を参照)

 設定例

$CATALINA_HOME/bin/setenv.sh (Linux) 
#!/bin/sh

CATALINA_OPTS="-Xmx512m -Xms256m"

 設定確認

* 「jps -v」で表示できる

 設定値目安

 * メモリ最大使用量(-Xmx) : 搭載メモリの半分程度
 * メモリ初期使用量(-Xms) : Xmxの半分程度

 参考文献

https://docs.oracle.com/cd/E53142_01/integrator.311/integrator_install/src/cli_ldi_server_config.html
http://www.kumoyanet.com/514/
https://groupsession.jp/support/setup_08.html