数十万件のメール処理による滞留

 08, 2014 22:23
mailmanがML宛のメールを処理しきれなくなり、メール配信が大幅に遅延する事態が発生しました。
(ML以外のメール送受信は問題なし)


大量のメール自体はウイスルや攻撃ではなく、サーバ障害検知メールを監視システムが出していたのが原因ですが、何故か秒単位で延々とメールを吐き出し続け、溜まりに溜まって何十万という数のメール数になっていた状態です。

(担当外な監視システムだったので、なぜそんなにメール送信されたか詳細不明)




・以下、対処した時のメモ

mailqコマンドで
Mail queue is empty
だったのでPostfixでは未配信のメールがないことを確認。

そしてmailmanで処理するメールが何処に保存されるのか知らなかったので、メールが滞留しているディレクトリを把握のため、findでmailman関係のディレクトリを確認

find / -name "mailman" -type d

確認した情報をグーグルで検索し、以下のディレクトリがメールキューの貯め場所であると当たりをつける。

/var/spool/mailman/in

中に.pckファイルが大量にあることを確認。


メールが送信されていた時間帯は聞いていたので、特定の日時のファイルのみを別ディレクトリに退避させようと思ったが、mvコマンドでどのように記述すればいいのか分からず困る。

仕方がないので、ファイル名が連番になっていることに着目して、手動で退避を実行。
(力技です)

mkdirでtmpを作成

mv 1043220* /var/spool/mailman/in/tmp
mv 1043221* /var/spool/mailman/in/tmp
mv 1043222* /var/spool/mailman/in/tmp



対象となる時間帯のメールを全て移動し、/var/spool/mailman/inに残っているファイルが数万件ほどに減少すると、数分で全てメール送信されディレクトリが空になった。


次にtmpに移動させたファイルのうち、監視システムが吐き出したメールとは無関係なメールも含まれている可能性があるので、中身の精査。


監視システムのメールに含まれている文字列(仮にhogehogeとする)を元にgrep。
hogehogeが含まれていないファイル名をテキストに吐き出す。

ls | xargs -n 10 grep -L hogehoge > jyogai.txt

jyogai.txtに書き出されたファイル名が無関係なメールとなる。

該当ファイルを元の/var/spool/mailman/inに戻す。
/var/spool/mailman/in/tmpに残ったゴミメールは削除。

ML宛にメールを送信し、問題なく配信されることを確認して対応完了。




数万件のメールはすぐ処理できるのに、一桁増えると全く処理が進まないのは何故なんでしょうかね。
そういうものなのかな。

COMMENT 0


WHAT'S NEW?