proc_mem[]の数値について
あるプロセスが、メモリをどれくらい使っていたかを、
proc_info[exe_name,vmsize,avg]
で監視しています。(監視対象ホストはWindowsです)
通常、これでうまくいっているのですが、
プロセスが複数起動されると、この値がうまく
取れていないようです。グラフも、プロセスが2つ
以上起動された後から、線がぶっつり切れてしまいます。
(proc_num[exe_name]でプロセス数を取得してわかりました)
同じプログラムが複数起動された場合の、proc_infoの
挙動はどうなっているのでしょうか?
また、同時に同じプログラムが複数起動されうる場合、
各プログラムの proc_info[]の値の合計値を利用したい
場合は、どのような設定をすればよろしいでしょうか?
#項目を間違えて投稿してしまいましたので、
#修正しました。申し訳ありません。
KAZ - 投稿数: 1085
KAZと申します。
取り敢えず、ソースを読んでみました。
読んだのは下記のソース
〜\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 - 投稿数: 12
KAZさま:
その後、下記のように設定を変更したら、
とりあえずグラフの線が切れることはなくなったようです。
・数値を「integer 64bit」から「float」に変更
・キーの3番目のパラメータを「avg」から「sum」に変更
どうもありがとうございました。
kodai - 投稿数: 1341
すでに解決されているようですが、キーの第3パラメータがavgの場合、KAZさんが説明されている
のタイミングで、計算結果が浮動小数になってしまうため、アイテムの数値設定が「intager 64bit」になっているとデータの型が合わずに保存できていなかっただけなのかもしれません。
そのため、第3パラメータがsumの場合は、intager 64bitでも動作するかもしれません。アイテムで実際に取得したデータを参照してみて、適切な設定を行って頂くのが良いと思います。
KAZ - 投稿数: 1085
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でも動作は可能な作りにしているように伺えます。