Asakusa Framework Advent Calendar 2016の2日目です。
Asakusa on M3BPのバッチでは、データがマシンのメモリーに乗り切らないと処理できません。
したがって、どれくらいのメモリーを積んだマシンを用意すればよいか?ということが問題になります。
しかしながら、バッチの種類(どんな処理をするのか?入力データを絞る処理なのか、データを増幅させる処理なのか、中間データが膨らむような処理なのか)によって必要なメモリー量は異なるので、一概にどれくらいあればいいとは言えません。
一応、余裕を見て、入力データの5倍くらいのメモリーがあれば大丈夫かなぁというのが目安な感じではあるようですが。
そして、バッチが完成したら、実行の際に実際にどれくらいのメモリーを使ったのかが気になります。
Unixのtopコマンドでメモリー使用量は分かりますが、ずっと見ていないといけません(爆)
昔ながらのstat系のコマンドを使うならvmstatでしょうか。
最近のLinuxだと、dstatというコマンドがとても便利です。stat系の情報(指定したもの)を全て表示できます。
$ dstat -t --cpu --sys --mem --disk --net --output dstat.out 1
(dstat.outというファイルにCPU使用率・メモリー使用量・ディスクアクセス量・ネット通信量を出力します)
ただ、メモリーの最大使用量を確認するだけなら、timeコマンドが便利です。
timeはシェルの組み込みコマンドのようですが、/usr/bin/timeというものもあって、後者に-vオプションを付けると、コマンドの実行時間の他にメモリーの最大使用量等の情報が表示されます。
$ /usr/bin/time -v $ASAKUSA_HOME/yaess/bin/yaess-batch.sh m3bp.ExampleBatch ~ Command being timed: "/home/hishidama/asakusa/yaess/bin/yaess-batch.sh m3bp.ExampleBatch" User time (seconds): 1879.28 System time (seconds): 70.34 Percent of CPU this job got: 1588% Elapsed (wall clock) time (h:mm:ss or m:ss): 2:01.69 ~ Maximum resident set size (kbytes): 47875156 ~ Exit status: 0
なお、yeass-batch.shに対してtimeコマンドを仕掛けるのではなく、その中で起動されるjavaコマンドに対して仕掛けることも出来ます。
$ export ASAKUSA_M3BP_LAUNCHER="/usr/bin/time -v" $ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh m3bp.ExampleBatch
ただ、どちらの方法でも結果は大差無かったです。