ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

バッチのメモリー使用量の確認方法

2016-12-02 00:00:59 | PG(分散処理)

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

ただ、どちらの方法でも結果は大差無かったです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする