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 - 投稿数: 113
SNMP監視ですが、インターフェース以外で取得できていた下記項目を無効にしたところ、50%から20%弱に負荷が減少しました。
・icmpInAddrMaskRepsなど
・ipDefaultTTLなど
・lcpuPercentBusyやsysNameなど
SNMPに関しては、監視項目を絞り込んだほうが良いようです。
kodai - 投稿数: 1341
こんにちは。
SNMPとMySQLの負荷とは直接関連性はないと思うので、おそらくはアイテム数が多くてMySQLのI/O負荷が高くなっているのではないかと思います。
MySQL側は何かチューニングはされているでしょうか?特にInnoDB使用時はinnodb_buffer_pool_size、innodb_log_file_sizeのデフォルト値が小さすぎるため、この値を大きくしてMySQLにメモリを多めに割り当てるようにしないとI/O負荷が上がりやすくなってしまいます。
miko - 投稿数: 113
御回答いただき、有難うございます。
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 - 投稿数: 1341
返信が遅くなりすみません。
上記のMySQL設定であれば、ある程度の規模までは耐えられるはずです。
有効になっているアイテム数はどのくらいあるでしょうか?メニューから[レポート]->[ZABBIXサーバの状態]をクリックした画面のアイテム数(有効)を見れば、現在有効なアイテム数を見ることができます。
現在の接続数が50程度であれば、max_connectionsを下げてもあまり効果はないのではと思います。最大接続数はあまり下げるとZABBIXがMySQLに接続できなくなり落ちてしまう時があるので注意してください。
join_buffer_sizeやread_buffer_sizeは参照時のメモリ割当なので、変更してもそれほど変わらないと思います。
miko - 投稿数: 113
御回答いただき、有難うございます。
今のMySQL設定で、有る程度の規模まで問題なく動くのですね。安心しました。
現在の登録数は次のとおりです。
ホスト数:449
アイテム数:1641
トリガー数:2059
なるほど、max_connectionsを下げても効果はあまり無いのですか。
MySQLの設定チェック用スクリプトなどでは、max_connections×スレッドバッファ合計をチェックするため、innodb_buffer_pool_size を大きくするとメモリ合計が大きすぎると表示されるので、減らすことでinnodb_buffer_pool_sizeをもう少し確保しようと考えました。
なるほど、ZABBIXのメイン動作がデータ収集・保管ですから、データ閲覧などの時に使用するこれらのパラメータは、あまり影響しないのですね。
有難うございました。
kodai - 投稿数: 1341
こんにちは。
アイテム数もそれほど多いわけではないと思うので、以下の点を見直されてみてはどうでしょう。
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 - 投稿数: 113
御回答いただき、有難うございます。
なるほど、更新間隔の調整でデータ量と更新回数が減れば、MySQLの負荷が減りますね。
デフォルトのままなので60秒でしたから、長くすることを検討します。
ログファイルの大きさを増やすのですか。ログファイルを別のHDDに置きI/O分散も考えていたので、合わせて検討してみます。
有難うございました。
miko - 投稿数: 113
SNMP監視間隔を、60sから300sに変更してみました。
全体のCPU使用率が30%弱から20%弱に減少しました。
タイミングを見てログファイルの調整を行ってみます。
有難うございました。