topコマンドでサーバーを監視していると、1日に何回か、
急激にtasks の数が普段130程度なのが急上昇して 200 くらいになり、
同時に load average の値が、普段 0.1から 0.5 程度なのが
20 とか30 まで急上昇します。
急激に増えたtasks が何なのか調べようと
#ps -aux
を打って見ると、それは以下のようにほとんど全てが sendmail で、
迷惑メールがサーバーに流れ込んでいる状態なんだと思います。
そして、そのほとんどの sendmail の STAT が D になっています。
そして高負荷な状態が3分から10分継続します。
STAT COMMAND
D sendmail: sm-acceptingconnections: m48B0GUt030737 static-72-224-7-89.ipcom.comunitel.net [89.7.224.72] (may be forged): RCPT
D sendmail: sm-acceptingconnections: m48B0Gu1030737 maverick.lucnetsolutions.com [67.19.81.178] (may be forged): RCPT TO:<
D sendmail: sm-acceptingconnections: server [148.74.30.182] startup
D sendmail: sm-acceptingconnections: server 61.11.127.123-bb.static.vsnl.eth.net [61.11.127.123] (may be forged) startup
D sendmail: sm-acceptingconnections: server 59-115-193-195.dynamic.hinet.net [59.115.193.195] cmd read
D sendmail: sm-acceptingconnections: server 61-91-154-194.static.asianet.co.th [61.91.154.194] cmd read
D sendmail: sm-acceptingconnections: m48B0N92030737 host-84-223-248-186.cust-adsl.tiscali.it [84.223.248.186]: QUIT
しかし迷惑メールは基本的に一日中流れ込んでいて、sendmailの数が
上昇することはあっても load average が急上昇することはなく、
そのsendmailのSTAT は 大抵 S となっています。
STAT が D のsendmailプロセスが大量に発生しているときだけ、
load averageが20や30まで急上昇します。
STAT が D というのは 「割り込み不可のスリープ状態」だそうですが、
これはどういう状態なんでしょうか。また何故、発生するのか悩んでいます。
メモリー不足の線も考えましたがスワップが発生しているようでもなく・・
こういう状態になるたびにサーバーが重くなるので困っています。
何かsendmail以外の原因でサーバー負荷が大きくなった結果として
STATがDのsendmailが溜まったのかとも考えますが、
目を凝らしてtopやアクセスログを見てもそれらしい動きはなく
全く分かりません。
どこかチェックすべき点、対処法、sendmailプロセスのSTATがDの意味・・
などアドバイスをぜひ宜しく御願いいたします。
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 には何かヒントになるようなログはありませんか?
この回答への補足
プロセス数を増やす、減らす、とは具体的にどういうことでしょうか?sendmailプロセスはほとんどがサーバーに流入する迷惑メールですが、STATがDのsendmailが大量に発生してload averageが急上昇するのは本当に突発的で、1日に何回もランダムに発生します。他の通常の大量のsendmailプロセス(迷惑メール)と何が違うのか区別ができません。違いは STATが D。というだけで。。
「メールを各ユーザーごと保存するのに時間がかかっている」ということでSTATがDになっている場合、四六時中だいたい同じ数量で迷惑メールが流れ込んでいるにもかかわらず、なぜそのときは、そうなるのか、違いが分かりません。
メールログ、/var/log/messages, /var/log/secure も、リアルタイムでにらめっこしていますが特に変わった動きもなく何も発見できませんでした。
メールボックスに大量のメールが残っている場合、このメールアカウントにログイン動作をすると、接続までに非常に時間がかかり、このとき負荷が急上昇するような気もします。負荷が上がることでsendmailプロセスがDで滞留してしまう、という可能性は・・
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 のマニュアルを読むことから始めてみてはいかがでしょうか。
No.1
- 回答日時:
S: Sent(送信済)
D: Deferred(送信延期)
ではないかと。
外部からのスパム受信により、User unknown の返信に時間がかかっているか、スパムの踏み台にされているか、フォワード先が無いかのどれかでしょう。
踏み台にされている可能性がある場合は、以下のサイトで確認できます。
http://www.rbl.jp/index-j.php
第三者中継チェックや、ブラックリストチェックができるでこちらで確認してみてください。
この回答への補足
topで見ているときのSTATですので、S は sleep 、D も sleep(割り込み不可)だと。。 relay check は問題なく、ブラックリストも問題ありません。
四六時中サーバーに流れ込んでいるスパムのsendmailプロセスは常時結構な数がありますが、ほとんどがSで負荷は問題ないにもかかわらず、時々大量のDとなりserver loadが上昇します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mailコマンドで外部メールに送...
-
sendmailでのctladdrの変更
-
sendmail 送信設定について
-
sendmail 8.12.2の設定
-
【MTA】postfixとsendmail【違い】
-
sendmailで他ドメインのアドレ...
-
パスワード設定していないユー...
-
同一のホスト名で何か問題があ...
-
”Tortoise SVN” と ”Subversio...
-
「DNSサーバーを自動的に取得す...
-
ワークグループ設定のPCの名前解決
-
DNSサーバを設定したのですがns...
-
循環参照にならない方法があっ...
-
リモートデスクトップ接続でパ...
-
エラーメールで"too many hops"...
-
アウトルックで送信時に「名前...
-
フォルダにパスワードをかけた...
-
squidのアクセスログについて
-
Linuxでパスワード変更時に「it...
-
Mailの送信済みメールボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【MTA】postfixとsendmail【違い】
-
sendmailで Received: from unk...
-
sendmailでのctladdrの変更
-
mailコマンドで外部メールに送...
-
sendmailもしくは、クライアン...
-
sendmailでメールが送れない
-
「mail」コマンドと「sendmail...
-
cronの実行結果をメールで受け...
-
sendmailの設定でM4コマンドが...
-
root宛てメールの転送について
-
メールサーバの無限ループを対...
-
sendmailで不正ログ 「Relayin...
-
newaliasesがうまくいきません
-
sendmailコマンドでの送信につ...
-
sendmailの再起動
-
sendmailで特定ドメインに送信...
-
centos5でsendmailのエラー
-
Sendmailで送信者ごとに次の転...
-
Linux maillog の読み取り方に...
-
/var/log/maillog について
おすすめ情報