zabbixサーバでswap使用率が高い

64bitOS環境下でzabbix-2.0.2-1(rpm)を利用しています。
dbはmysql(5.1.61-4)を使用しており、下記の状態にあります。

【Zabbixサーバの状態】
ホスト数 (有効/無効/テンプレート) 189 (115 / 10 / 64)
アイテム数 (有効/無効/取得不可) 11606 (11119 / 278 / 209)
トリガー数 (有効/無効)[障害/不明/正常] 2175 (2006 / 169) [1 / 0 / 2005]
1秒あたりの監視項目数(Zabbixサーバの要求パフォーマンス) 137.45

zabbixサーバ自身のメモリ使用率およびswap使用率を見ると、
 メモリ使用率:77% (used-buffers-cached)/total
 swap使用率:52%  キー;system.swap.size[,pused]
といった状況にあります。

swapの使用率が高いように思いますが・・・
これは搭載メモリや設定、監視項目数から言って妥当なのでしょうか?
swapを発生させない(使用率ゼロ)ためにはどうすればいいのでしょうか?

ご存じの方がおられましたらご教授いただけないでしょうか?

以下 現在の環境です。
==============================================================================
# cat /proc/meminfo
...
MemTotal: 3923820 kB
SwapTotal: 4194296 kB
...

# cat /etc/my.cnf
[mysqld]
...
innodb_file_per_table
innodb_buffer_pool_size=2048M
innodb_log_file_size=128M
default-character-set=utf8
...

# top
load average: 0.00, 0.00, 0.00
Tasks: 186 total, 1 running, 185 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.5%us, 1.5%sy, 0.0%ni, 96.5%id, 0.0%wa, 0.0%hi, 0.5%si, 0.0%st
Mem: 3923820k total, 3793840k used, 129980k free, 44988k buffers
Swap: 4194296k total, 2170168k used, 2024128k free, 725772k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1881 mysql 20 0 3436m 2.2g 3724 S 0.0 58.3 777:08.33 mysqld
==============================================================================

コメント表示オプション

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

メモリを4GB程度搭載されているようですので、100台程度であれば
これほどスワップは発生しないとは思うのですが、psコマンドなど
を利用してどのプロセスが多くメモリを利用しているのかを確認し
てみていただけませんでしょうか?

特に、mysqld以外に多くのメモリを消費しているプロセスとその消
費サイズはどの程度になってますでしょうか?

あと、可能性の1つとしてですが、Zabbixサーバを長期間稼動させ
ているとswapが多く発生するようになるということであれば、もし
かしてSSHを利用した監視を利用されていませんでしょうか?

そうであるならば、libssh2のバージョンを1.4.2以降にバージョン
アップしないとメモリリークの問題があるのでご注意ください。

TNK さん コメントありがとうございます。

メモリ使用率上位10プロセスを確認しました。
mysqld以外は目立ったプロセスはないように思います。

====================================================================================
# ps alx --sort -rss | head -10
VSZ RSS TIME COMMAND
3518624 2292360 780:09 /usr/libexec/mysqld ... --socket=/var/lib/mysql/mysql.sock
243684 141992 2:32 clamd
1652168 68696 2:49 zabbix_server -c /etc/zabbix/zabbix_server.conf
2371528 50948 16:04 java -server -classpath .... com.zabbix.gateway.JavaGateway
767192 35340 29:56 /usr/sbin/eecd
924952 31824 8:42 zabbix_server -c /etc/zabbix/zabbix_server.conf
924856 31572 8:42 zabbix_server -c /etc/zabbix/zabbix_server.conf
926712 31300 8:45 zabbix_server -c /etc/zabbix/zabbix_server.conf
926148 30796 8:44 zabbix_server -c /etc/zabbix/zabbix_server.conf

# top
USER %CPU %MEM TIME+ COMMAND
mysql 8.0 58.4 780:12.81 mysqld
clamav 0.0 3.6 2:32.79 clamd
zabbix 0.0 1.8 2:49.08 zabbix_server
zabbix 0.0 1.3 16:05.03 java
root 0.0 0.9 29:57.12 eecd
zabbix 0.0 0.8 8:42.09 zabbix_server
zabbix 0.0 0.8 8:42.14 zabbix_server
zabbix 0.0 0.8 8:45.76 zabbix_server
zabbix 0.0 0.8 8:44.22 zabbix_server
====================================================================================

あと、可能性の1つとしてですが、Zabbixサーバを長期間稼動させ
ているとswapが多く発生するようになるということであれば、もし
かしてSSHを利用した監視を利用されていませんでしょうか?

そうであるならば、libssh2のバージョンを1.4.2以降にバージョン
アップしないとメモリリークの問題があるのでご注意ください。

長期間稼働はさせてません。(1ヶ月稼働中です。)
zabbixサーバでSSHを利用した監視も行なっていません。
(と思っています。エージェントとsnmpとjmxがほとんどです。)

なお、libssh2は下記のバージョンを利用しています。
# rpm -qa | grep ssh
libssh2-1.2.2-7.el6_2.3.x86_64

sshに関連したことで言えば、zabbixサーバを別システムからsshで監視しています。
zabbixの稼働状況を確認するため、
別システムから3分間隔でzabbixサーバにsshでログインしスクリプトをで行しています。
(スクリプト内の実行コマンドは:service zabbix-server status)

この事が、メモリリークを発生させていることはあるのでしょうか?

何かお気づきのことがありましたら、教えて下さい。

ユーザー TNK の写真

頂いた各プロセスのメモリ利用状況を見る限り、トータルで4GBで
はメモリが足らない状況のようです。
これでは、swapが多く発生してしまうと思います。

同程度の監視規模の2.0の環境が無いため、zabbix_serverプロセス
のメモリ使用量が異常かどうかは判定できませんが、zabbix_server
プロセス自体も私が予想していたものよりかなり大きなメモリを消
費しているようです。

swapの発生を減らすには、

 ・メモリを追加する
 ・MySQLへのメモリ割り当てを減らす
 ・Java Gatewayを別のサーバで稼動させる
 ・アイテム取得の間隔を延長する

などが考えられます。

極力現在の環境を変更せずにということであれば、あまり減らした
くはありませんが、zabbix_server自体でもデータのキャッシュを
行ってDBアクセスの頻度を削減しているので、少し、MySQLへの割
り当てを減らすことが可能かもしれません。

sshに関連したことで言えば、zabbixサーバを別システムからsshで監視しています。
zabbixの稼働状況を確認するため、
別システムから3分間隔でzabbixサーバにsshでログインしスクリプトをで行しています。
(スクリプト内の実行コマンドは:service zabbix-server status)

この事が、メモリリークを発生させていることはあるのでしょうか?

sshdの利用メモリが増大しているわけではありませんので、これは
関係ないと思います。

TNKさん コメントありがとうございます。

頂いた各プロセスのメモリ利用状況を見る限り、トータルで4GBで
はメモリが足らない状況のようです。
これでは、swapが多く発生してしまうと思います。

やはりメモリ不足なのですね・・・

swapの発生を減らすには、

 ・メモリを追加する
 ・MySQLへのメモリ割り当てを減らす
 ・Java Gatewayを別のサーバで稼動させる
 ・アイテム取得の間隔を延長する

などが考えられます。

メモリ追加がすぐ出来ないので、頂いた案から下記を実行してみました。

 1) innodb_buffer_pool_size の割り当てサイズを下げる
    2048MB → 1536MB
  ⇒ 【結果】 swap使用率に変化なし。
    割り当てサイズをもとに戻す。

 2) jmxの監視を全て停止
  ⇒ 【結果】 swap使用率に変化なし。

 3) java gateway サービスを停止させる。
  ⇒ 【結果】 swap使用率に変化なし。
    java gatewayサービスを稼働後、jmx監視を再開

 4) zabbix-server サービスを再起動
  ⇒ 【結果】 swap使用率に変化あり。利用率2%以下に急落

これらのことから、(暫定的に)zabbix-serverを定期的に再起動しようと考えています。

状況を見て、
 ・java gatewayサービスの分離
 ・物理メモリの追加
を検討したいと思います。

投稿ミスです。