Agentについて

OS:Solaris
用途:メールサーバ

【事象】
Solarisテンプレート(デフォルト)でポート監視をしていますが、メーラーからのPOPが異状に遅くなっています。
サーバログを確認したところ、エージェントを導入して監視を始めた辺りから以下のログが頻発して上がっております。
----------------------------------------
-ERR POP EOF or I/O Error [popper.c:820]
----------------------------------------

POPデーモンはゾンビ化していませんが、ログから察すると、
POPセッションが強制的に切られ、監視のタイミング(60秒/回)でセッションTIME_WAITでPOPポートを食いつぶしているように感じます。その為、POPセッションが開放されるのを待っている為、メーラーからのPOPが異状に遅いのではと思われます。
暫定処置としてAgentを停止したらサクッとPOP出来た点からも、
エージェントの動作を疑っております。

【質問事項】
? これは仕様によるものでしょうか。
? 今回はPOPでしたが他にService監視している例えばSMTP, HTTPも同じようなことに陥る可能性はありますでしょうか。
? 正常にセッションを終了させる方法はありますでしょうか。
回避策がありましたらご教授ください。
? またSoraris以外のエージェントでも同様の事象が発生する可能性はあるのでしょうか。

以上、よろしくお願いいたします。

コメント表示オプション

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

単純にソケットの接続と切断だけを行っているからだと思われます。
tcp_time_wait_intervalの値を60秒にするとか、チューニングしてみてはいかがでしょうか?

もしかしたら、以下のようにソースを変更すれば、お行儀良く切断してくれるようになるかもしれません。
(ZABBIX 1.6.8のソースで確認)

src/libs/zbxsysinfo/common/net.c
 関数 tcp_expect()で、ポート番号がpop用の110なら、
 接続後に受信処理を行ない、requestが指定されていなくても、
 sendtocloseが指定されていたら送るようにする。

src/libs/zbxsysinfo/simple/simple.c
 関数 CHECK_SERVICE_PERF()
 関数 CHECK_SERVICE()
 の中で、popに対応する
  ret=tcp_expect(ip,port,NULL,"+OK","",&value_int);
 を
  ret=tcp_expect(ip,port,NULL,"+OK","QUIT\n",&value_int);
 に変更する。

実際には検証しておりませんので、うまく行かない場合はご了承下さい。

ソースを見る限り、他のプロトコルでも同様の問題が発生しそうな気がします。
Linuxでその問題が顕在化しないのは、TCPスタックのデフォルト値や挙動の違いなのでしょうか。

ユーザー tatsuo の写真

TNK様

ご回答ありがとうございます。
一度、検証してみます。

今後ともよろしくお願いいたします。