ZABBIXによるSNMP監視でCPU負荷が大きい

FORUMにはいつもお世話になっております。

Pentuim4・2GのCentOS5.3 に ZABBIX1.4.5-2 をrpmにてインストールしました。

監視対象として、icmppingが約400台、サービス・ポートチェックが約40台、snmpが約25台を登録しています。

snmp監視を設定してからCPU負荷が常時50%程度となり、その大半をmysqlが使用しています。
mysqlの設定をいろいろ変更したのですが変らず、snmp監視対象のホストを対象外にしたところ、負荷が激減しました。このため、snmp監視により発生している現象のようです。

snmp監視には既存テンプレートを使用しており、インターフェースを含めて取得できない項目を各ホストで無効にしています。

ZABBIXでsnmp監視を行う場合、ZABBIX・mysqlに対して行ったほうが良い設定などはあるのでしょうか?

何か情報がありましたら、教えていただけますか。
宜しくお願いします。

コメント表示オプション

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

SNMP監視ですが、インターフェース以外で取得できていた下記項目を無効にしたところ、50%から20%弱に負荷が減少しました。
・icmpInAddrMaskRepsなど
・ipDefaultTTLなど
・lcpuPercentBusyやsysNameなど

SNMPに関しては、監視項目を絞り込んだほうが良いようです。

ユーザー kodai の写真

こんにちは。

SNMPとMySQLの負荷とは直接関連性はないと思うので、おそらくはアイテム数が多くてMySQLのI/O負荷が高くなっているのではないかと思います。

MySQL側は何かチューニングはされているでしょうか?特にInnoDB使用時はinnodb_buffer_pool_size、innodb_log_file_sizeのデフォルト値が小さすぎるため、この値を大きくしてMySQLにメモリを多めに割り当てるようにしないとI/O負荷が上がりやすくなってしまいます。

ユーザー miko の写真

御回答いただき、有難うございます。

SNMPの単純な負荷でなく、MySQLのI/O負荷が問題なのですか。
アイテム数を減らすことでこれが減ったため、負荷が軽減されたということですね。

Mysqlに関しては、下記のような項目を設定しています。
innodb_file_per_table
innodb_buffer_pool_size = 768M
innodb_additional_mem_pool_size = 20971520
innodb_log_buffer_size = 16777216
innodb_log_file_size = 134217728
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size = 4M
log-bin=mysql-bin
table_cache = 200
thread_cache = 100
max_heap_table_size = 100M
tmp_table_size = 100M

innodb_buffer_pool_sizeをもう少し増やしたいと考えているのですが、ZABBIXで使用するコネクション・スレッド数はどの程度なのでしょうか?

max_conecctionを減らすことで、最大スレッドバッファを減らし、innodb_buffer_pool_sizeにもう少し割り当てられると考えています。
現在はデフォルトの100ですが、Mysqlのstatusなどを見ると30弱程度なので、50程度まで下げても問題ないのでしょうか?

join_buffer_sizeやread_buffer_sizeなどを変更したのですが、あまり効果が無いようなので、デフォルトに戻すことを考えております。

何か情報がありましたら、教えていただけますか。
宜しくお願いします。

ユーザー kodai の写真

返信が遅くなりすみません。

上記のMySQL設定であれば、ある程度の規模までは耐えられるはずです。

有効になっているアイテム数はどのくらいあるでしょうか?メニューから[レポート]->[ZABBIXサーバの状態]をクリックした画面のアイテム数(有効)を見れば、現在有効なアイテム数を見ることができます。

max_conecctionを減らすことで、最大スレッドバッファを減らし、innodb_buffer_pool_sizeにもう少し割り当てられると考えています。
現在はデフォルトの100ですが、Mysqlのstatusなどを見ると30弱程度なので、50程度まで下げても問題ないのでしょうか?

現在の接続数が50程度であれば、max_connectionsを下げてもあまり効果はないのではと思います。最大接続数はあまり下げるとZABBIXがMySQLに接続できなくなり落ちてしまう時があるので注意してください。

join_buffer_sizeやread_buffer_sizeなどを変更したのですが、あまり効果が無いようなので、デフォルトに戻すことを考えております。

join_buffer_sizeやread_buffer_sizeは参照時のメモリ割当なので、変更してもそれほど変わらないと思います。

ユーザー miko の写真

御回答いただき、有難うございます。

kodaiさんは書きました:
返信が遅くなりすみません。

上記のMySQL設定であれば、ある程度の規模までは耐えられるはずです。

有効になっているアイテム数はどのくらいあるでしょうか?メニューから[レポート]->[ZABBIXサーバの状態]をクリックした画面のアイテム数(有効)を見れば、現在有効なアイテム数を見ることができます。

今のMySQL設定で、有る程度の規模まで問題なく動くのですね。安心しました。
現在の登録数は次のとおりです。
ホスト数:449
アイテム数:1641
トリガー数:2059

現在の接続数が50程度であれば、max_connectionsを下げてもあまり効果はないのではと思います。最大接続数はあまり下げるとZABBIXがMySQLに接続できなくなり落ちてしまう時があるので注意してください。

なるほど、max_connectionsを下げても効果はあまり無いのですか。
MySQLの設定チェック用スクリプトなどでは、max_connections×スレッドバッファ合計をチェックするため、innodb_buffer_pool_size を大きくするとメモリ合計が大きすぎると表示されるので、減らすことでinnodb_buffer_pool_sizeをもう少し確保しようと考えました。

join_buffer_sizeやread_buffer_sizeは参照時のメモリ割当なので、変更してもそれほど変わらないと思います。

なるほど、ZABBIXのメイン動作がデータ収集・保管ですから、データ閲覧などの時に使用するこれらのパラメータは、あまり影響しないのですね。

有難うございました。

ユーザー kodai の写真

こんにちは。

アイテム数もそれほど多いわけではないと思うので、以下の点を見直されてみてはどうでしょう。

1. アイテムの更新間隔を見直す

デフォルトで入っているテンプレートではアイテムの更新間隔がとても短いものがあります。更新間隔の設定を見直すことでMySQLへの負荷を下げることができます。ちなみに、私が導入するときは300秒(5分)を基本にしています。

2. MySQLのinnodb_log_file_size設定を大きくする

innodb_log_file_size * innodb_log_files_in_group(デフォルトは2) < innodb_buffer_pool_size

であれば良いので、innodb_log_file_sizeを192Mなどに増やしてみてはどうでしょうか。

innodb_log_file_sizeを変更するときはデータベースが破損する可能性があるため、必ずデータベースのフルバックアップをとって、MySQLを停止し、/var/lib/mysql/ib_logfileを削除してからMySQLを起動するようにしてください。

ユーザー miko の写真

御回答いただき、有難うございます。

kodaiさんは書きました:
こんにちは。

アイテム数もそれほど多いわけではないと思うので、以下の点を見直されてみてはどうでしょう。

1. アイテムの更新間隔を見直す

デフォルトで入っているテンプレートではアイテムの更新間隔がとても短いものがあります。更新間隔の設定を見直すことでMySQLへの負荷を下げることができます。ちなみに、私が導入するときは300秒(5分)を基本にしています。

なるほど、更新間隔の調整でデータ量と更新回数が減れば、MySQLの負荷が減りますね。
デフォルトのままなので60秒でしたから、長くすることを検討します。

2. MySQLのinnodb_log_file_size設定を大きくする

innodb_log_file_size * innodb_log_files_in_group(デフォルトは2) < innodb_buffer_pool_size

であれば良いので、innodb_log_file_sizeを192Mなどに増やしてみてはどうでしょうか。

innodb_log_file_sizeを変更するときはデータベースが破損する可能性があるため、必ずデータベースのフルバックアップをとって、MySQLを停止し、/var/lib/mysql/ib_logfileを削除してからMySQLを起動するようにしてください。

ログファイルの大きさを増やすのですか。ログファイルを別のHDDに置きI/O分散も考えていたので、合わせて検討してみます。

有難うございました。

ユーザー miko の写真

SNMP監視間隔を、60sから300sに変更してみました。
全体のCPU使用率が30%弱から20%弱に減少しました。

タイミングを見てログファイルの調整を行ってみます。

有難うございました。