Windows用エージェントのバグ(1.6.9)

こちらのサイトには日ごろお世話になっております。

さて、下記環境でCPU使用率を取得したところ、使用率が100%を超える状況が確認されまして、
関連ありそうなソースをチェックしたところ、for文に由来する計算ミスが疑われましたので、
こちらに投稿させていただきました。

お手数ですがご確認の上、本家への訂正依頼をお願いできないでしょうか。
どうかよろしくお願いいたします。

○サーバ
FreeBSD 7.2 Release(AMD64)
ZabbixServer Ver1.6.8_1(FreeBSDのportsより導入)

○クライアント
WindowsXP SP3
Zabbix Agent Ver 1.6.9-1(zabbix-jpのサイトより入手)

○症状
クライアントのCPU使用率を1分以上100%にした状態で
キー「system.cpu.util[]」の結果が101.66667%と出る。
同様に、avg5では100.33333%となる

○問題のソース
zabbix-1.6.9\src\zabbix_agent\cpustat.c
598行目から613行目、及び642行目から656行目までの処理で
1秒ごとの測定値をsumに足し、時間で割って平均値を出しているのですが、
カウンタjは0から始まっているので、jが60になるときには61回目の加算が行われているはずです。

(598秒目から613行目)<pre>
/* Calculate average cpu usage */
for(n = pcpus->cpu[i].h_usage_index, j = 0, sum = 0; j < MAX_CPU_HISTORY; j++, n--)
{
if(n < 0) n = MAX_CPU_HISTORY - 1;

sum += pcpus->cpu[i].h_usage[n];

if(j == 60) /* cpu usage for last minute */
{
pcpus->cpu[i].util1 = ((double)sum)/(double)j;
}
else if(j == 300) /* cpu usage for last five minutes */
{
pcpus->cpu[i].util5 = ((double)sum)/(double)j;
}
}
</pre>

(641秒目から656行目)<pre>
/* Calculate average cpu usage */
for(n = pcpus->h_queue_index, j = 0, sum = 0; j < MAX_CPU_HISTORY; j++, n--)
{
if(n < 0) n = MAX_CPU_HISTORY - 1;

sum += pcpus->h_queue[n];

if(j == 60) /* processor(s) load for last minute */
{
pcpus->load1 = ((double)sum)/(double)j;
}
else if(j == 300) /* processor(s) load for last five minutes */
{
pcpus->load5 = ((double)sum)/(double)j;
}
}</pre>

コメント表示オプション

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

ご報告ありがとうございます。

確認して本家に報告しておきます。