• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:大量のsendmailのSTATがDでサーバーが高負荷に。。)

大量のsendmailのSTATがDでサーバーが高負荷になる原因と対処法は?

このQ&Aのポイント
  • サーバーを監視していると、急激にtasksの数が増加し、load averageの値も上昇する現象が発生している。
  • sendmailのプロセスがほとんど全てSTATがDになり、迷惑メールがサーバーに流れ込んでいることが判明している。
  • 迷惑メールが常時流れ込んでいるが、load averageが上昇するのはsendmailのSTATがDになっているときのみである。STATがDとは、割り込み不可のスリープ状態を指し、その原因や対処法については現在分かっていない。

質問者が選んだベストアンサー

  • ベストアンサー
  • junkUser
  • ベストアンサー率56% (218/384)
回答No.2

>topで見ているときのSTATですので、S は sleep 、D も sleep(割り込み不可)だと。 ちゃんと読めていませんでした。すみません。 uninterruptible sleep とは I/O 待ちをしているプロセスが入る状態です。 可能性としては、ディスクI/O、ネットワークI/Oですね。 メールを各ユーザーごと保存するのに時間がかかっているか、接続先(or 元)のMTAの応答が無い(or 遅い)のではないでしょうか。 ・ディスクのI/Oが遅い場合は、プロセス数を減らした方が速度が改善する可能性があります。iostat で確認できます。  RAIDを構成している場合は、ディスク障害の可能性も考えられます。なぜならスペア ディスクが無い状態でディスクが故障すると、パフォーマンスが極めて劣化するためです。  IDE、S-ATAの場合は、ディスク障害を正確に把握できない場合があるので、目視(聴覚?)点検が必要です。 ・ネットワークI/Oが遅い場合は、状況によりますがプロセス数を増やした方が速度が改善する可能性があります。  softbank 宛てなど携帯メールアドレス宛てが多い場合は、プロセス数を減らした方がよいでしょう。なぜなら同時5接続以上あると問答無用で遮断してしまうからです。topでみるとすべてDの状態になりかねません。  (docomo, au は同時20接続だったはず。自信なし) syslog には何かヒントになるようなログはありませんか?

tanpopo012
質問者

補足

プロセス数を増やす、減らす、とは具体的にどういうことでしょうか?sendmailプロセスはほとんどがサーバーに流入する迷惑メールですが、STATがDのsendmailが大量に発生してload averageが急上昇するのは本当に突発的で、1日に何回もランダムに発生します。他の通常の大量のsendmailプロセス(迷惑メール)と何が違うのか区別ができません。違いは STATが D。というだけで。。 「メールを各ユーザーごと保存するのに時間がかかっている」ということでSTATがDになっている場合、四六時中だいたい同じ数量で迷惑メールが流れ込んでいるにもかかわらず、なぜそのときは、そうなるのか、違いが分かりません。 メールログ、/var/log/messages, /var/log/secure も、リアルタイムでにらめっこしていますが特に変わった動きもなく何も発見できませんでした。 メールボックスに大量のメールが残っている場合、このメールアカウントにログイン動作をすると、接続までに非常に時間がかかり、このとき負荷が急上昇するような気もします。負荷が上がることでsendmailプロセスがDで滞留してしまう、という可能性は・・

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.3

>プロセス数を増やす、減らす、とは具体的にどういうことでしょうか? sendmail.cf 内の設定を変更してみてください。 CentOS 5 で見る限り、デフォルトはすべてコメントアウトされています。 --- # maximum number of children we allow at one time O MaxDaemonChildren=20 # limit on number of concurrent queue runners 0 MaxQueueChildren=50 # load average at which we just queue messages O QueueLA=8 # load average at which we refuse connections O RefuseLA=12 --- sendmail.mc の場合は --- define(`confMAX_DAEMON_CHILDREN', `20') define(`confMAX_QUEUE_CHILDREN',`50') define(`confQUEUE_LA', `12') define(`confREFUSE_LA', `18') --- mailq なども確認してみてください。 >メールボックスに大量のメールが残っている場合、このメールアカウントにログイン動作をすると、接続までに非常に時間がかかり、このとき負荷が急上昇するような気もします。 iostat -k で状況が確認できるのではないでしょうか。 --- まずは、sendmail のマニュアルを読むことから始めてみてはいかがでしょうか。

tanpopo012
質問者

お礼

かなり勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

S: Sent(送信済) D: Deferred(送信延期) ではないかと。 外部からのスパム受信により、User unknown の返信に時間がかかっているか、スパムの踏み台にされているか、フォワード先が無いかのどれかでしょう。 踏み台にされている可能性がある場合は、以下のサイトで確認できます。 http://www.rbl.jp/index-j.php 第三者中継チェックや、ブラックリストチェックができるでこちらで確認してみてください。

tanpopo012
質問者

補足

topで見ているときのSTATですので、S は sleep 、D も sleep(割り込み不可)だと。。 relay check は問題なく、ブラックリストも問題ありません。 四六時中サーバーに流れ込んでいるスパムのsendmailプロセスは常時結構な数がありますが、ほとんどがSで負荷は問題ないにもかかわらず、時々大量のDとなりserver loadが上昇します。

すると、全ての回答が全文表示されます。

関連するQ&A