proc_mem[]の数値について

あるプロセスが、メモリをどれくらい使っていたかを、
 proc_info[exe_name,vmsize,avg]
で監視しています。(監視対象ホストはWindowsです)

通常、これでうまくいっているのですが、
プロセスが複数起動されると、この値がうまく
取れていないようです。グラフも、プロセスが2つ
以上起動された後から、線がぶっつり切れてしまいます。
(proc_num[exe_name]でプロセス数を取得してわかりました)

同じプログラムが複数起動された場合の、proc_infoの
挙動はどうなっているのでしょうか?

また、同時に同じプログラムが複数起動されうる場合、
各プログラムの proc_info[]の値の合計値を利用したい
場合は、どのような設定をすればよろしいでしょうか?

#項目を間違えて投稿してしまいましたので、
#修正しました。申し訳ありません。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

KAZと申します。

同じプログラムが複数起動された場合の、proc_infoの
挙動はどうなっているのでしょうか?

取り敢えず、ソースを読んでみました。

読んだのは下記のソース
〜\zabbix-1.4.5\src\libs\zbxsysinfo\win32\proc.c
PROC_INFO関数
GetProcessAttribute関数

proc_info[exe_name,vmsize,avg]のパラメータに限定してソースを見る限りでは、流れは下記の通り。
※:かなり簡単に書いてます。

1.動いているプロセスIDを全部取得
2.プロセスIDからプロセス名取得
3.proc_infoの第1パラメータとプロセス名比較
4.同じならメモリ情報を収集
5.4の値を平均化
6.プロセスID数分繰り返し→2に戻る。

ユーザー hiroshi の写真

KAZさま:

その後、下記のように設定を変更したら、
とりあえずグラフの線が切れることはなくなったようです。

・数値を「integer 64bit」から「float」に変更
・キーの3番目のパラメータを「avg」から「sum」に変更

どうもありがとうございました。

ユーザー kodai の写真

すでに解決されているようですが、キーの第3パラメータがavgの場合、KAZさんが説明されている

5.4の値を平均化

のタイミングで、計算結果が浮動小数になってしまうため、アイテムの数値設定が「intager 64bit」になっているとデータの型が合わずに保存できていなかっただけなのかもしれません。

そのため、第3パラメータがsumの場合は、intager 64bitでも動作するかもしれません。アイテムで実際に取得したデータを参照してみて、適切な設定を行って頂くのが良いと思います。

ユーザー KAZ の写真

proc_infoの「データ形式」は数値(float)が正しい設定と思われます。

以下、検証。

返却値に少数が含まれるのは第3パラメータが「avg」で且つ、複数のプロセスの時だけです。
しかし、収集する値を保持する変数はdouble型でした。

また、serverへの返却値のtypeは下記のような対応になっているようです。(注:ソース上では下記の書き方になってません。)
<code>
Numeric(integer 64bit) 1
Numeric(float) 2
Character 4
Log 8
Text 16
</code>
proc_infoの返却値のtypeは「指定したtype 論理和 Numeric(float)」になっています。

上記よりproc_infoの返却値はデフォルトはNumeric(float)で、それ以外のtypeでも動作は可能な作りにしているように伺えます。