docker上で動かしているjavaアプリが何か遅い気がするとき、以下のような事をすればOKと思っている
マシン負荷を調べる(df -h, disk i/o, memory)
実行中のDocker Containerのメモリ使用量を docker stats コマンドを使って調べる
javaアプリのヒープメモリが足りない場合は以下のように調べてみる
JVMのヒープメモリを確認する(jstat)
$ jps
1121 Jps
988 Bootstrap
- 上のtomcat起動後、psコマンドでも出力された通り
- PID988のJVM情報を取得します
- -gccapacity オプションを付けてもいいかも jstat
gccapacity: 世代と対応する領域の容量に関する統計情報を表示します。
$ jstat -gc 988
S0C S1C S0U S1U EC EU OC OU MC MU > CCSC CCSU YGC YGCT FGC FGCT GCT 2560.0 2560.0 2540.0 0.0 32768.0 22237.8 44032.0 15113.8 16256.0 >15773.4 1920.0 1776.1 4 0.036 0 0.000 0.036
利用可能なjavaオプションは以下のようにすると出力可能となる
$ java -XX:+PrintFlagsFinal --version
ram
に着目したい場合は以下のようにgrep
すると良い
$ java -XX:+PrintFlagsFinal --version | grep -Ei "ram"
メモリサイズを増やす場合は以下のようにすればOK
$ java -XX:+PrintFlagsFinal -XX:MaxHeapSize=12g -version
原因によって対策が異なると思うが例えば上記のようにすると解決することもある
参考