質問: sendmailメールの一斉配信に失敗します 業務系webアプリの運用担当者です。 システムの機能としてメールの一斉配信ができるのですが、 webアプリからの一斉配信に部分的に失敗します。 300通の配信指定に対し、実際には50通前後で配信が中断されていました。 (前後、というのは何度か配信を実行し50通程度なら一斉配信できたという意味です) ログレベルが低く細かい解析はできていないのですが、 syslogをみると配送できていたアドレスのみ「sent ok」で記述されていました。 実際の負荷量によるとは思うのですが、 想定しているのは300通程度の一斉配信です。 宛先mtaはほぼばらばらになります。個人向けフリーアドレスも相当数あります。 配信にたとえ数十分かかっても、ちゃんと送信できればいいのです。 現在の設定では、子プロセスを一切生成しないようになっています。 そこで、sendmail.cf内下記を変更することで解決を試みようと 考えました。 ・変更前現在の値 #o forkeachjob=false #o maxdaemonchildren=0 ・変更後の想定値 o forkeachjob=true o maxdaemonchildren=20 私の解釈では、この変更によりキューが発生した際には子プロセスを最大20個 まで生成し分散処理され、300通のメールが無事配送されることを想定しています。 マシンスペックは大まかに、 ハードウェアはsunfire、osはsolaris9、 cpu:1ghz、mem:1gb となっています。 what コマンドを使用したsendmailバージョン表示が下記です。 # /usr/ccs/bin/what /usr/lib/sendmail | grep -i version $id: version.c,v 8.163.2.8 2006/07/26 17:24:02 ca exp $ システムの本番環境のために試しにいろいろ変えてみるというのはやりづらく、 運用実績のある方からコメントを頂戴できますと幸甚です。 どなたかこのあたりのチューニングを経験された方はいらっしゃいますでしょうか。 宜しくお願い致します。
回答: 最近sendmailは触ってないので参考になるかどうか分かりませんが、 もう少し情報収集した方が良いように思います。 1.「宛先mtaはほぼばらばら」とのことですが、あなたのサーバから直接 それぞれのmtaに接続しているのでしょうか? 例えばデータセンターの メールサーバを一旦経由するような場合、そこがボトルネックになっている(あるいは、dosと認識されているとか)可能性も考えられるかと思います。 2. syslogに記録されているということは、サーバ上でsendmailが利用できているものと思いますが、その場合、送信されなかったメールはキューに残ってはいないでしょうか? 残っていればいずれ送信されると思いますので、「たとえ数十分かかっても」というニーズには合致するかと思います。 3. maxdaemonchildren はサーバとしての待ち受けデーモンの数なので、送信する際に役立つかどうかはwebアプリがメール送信する際の実装方式に依存すると思います。