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 - 投稿数: 1341
ご報告ありがとうございます。
確認して本家に報告しておきます。