[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:17357] Re: 大量メール配送時の不具合
タロンです
Hiroyuki Hasegawa <admin@xxxxxxxxxxxx> さんは 大量メール配送時の不具合 にて
> 長谷川です。
>
> > これは ファイルオープンが Linux カーネルの制限 255 - 3 (stdin/stdout/stderr)
> > 分に引っかかって いるとおもいますが
> > > これは、プログラムからの呼び出しの問題なのでしょうか・・・
> > > C言語から、popenでsendmailと通信して、pcloseで閉じているだけなのですが。
> > 上記 252 を超えることは ありませんか?
>
> popen〜pcloseまでの処理が繰り返し行われる回数は、252を超えています。
> pcloseしてもファイルオープンされている扱いなのでしょうか。
> たとえば、fopen 〜 fcloseを何度繰り返しても、問題はないですよね?閉じてる
> わけですから。
> それとも、呼び出されたsendmailのプロセスがファイルをオープンしているために
> 出るエラーなのでしょうか。
>
> もしpcloseしてもオープンされている扱いなら、一度に処理できるメール数が252通
> (あるいはそれ以下)に限られてしまうということですよね。
>
> うーん。困った。。。
> 大体psコマンドで見ていると、130ほどsendmailプロセスで埋め尽くされた時点で
> segmentation fault か、Too many open files in system などが表示され、psコマンド
> 自体も実行できなくなります。
>
> > > maxQueueRunSize =10000
> を100などにしても、起動されるプロセスは抑制できないみたいです。
でしょうね
これは キューを吐き出すためのものじゃないかな?
CGI -> sendmail
で起動されて コネクションする場合の話ではないように感じます
#知ったかぶりかな?
/var/spool/mqueue に溜まってるファイルが たくさんあったりした場合
は 相手のサーバが なかなか応答してくれない場合にこの状況になった
覚えが あったりします
私の遭遇したケース
応答してくれなかったのが たまたま Nifty のsmtp だったりするんですが
これがラウンドロビンで 11個のmx が並んでいますが
この状況になると コネクションをはってからhelo をぜんぜんお話してくれ
ません。
それで linux の場合のデフォルトのタイムアウトが 90分だったりします
から 最悪 11 × 90分 ひとつのコネクションでまたされます
( 90分=> O'REILLY ジャパン
sendmail リファレンス sendmail 2nd Edistion p350より)
ですから
対策1 コネクションタイムアウトを短くする
まず このコネクションタイムアウトを 通常の 5m にしました
O Timeout.connect=5m
コメントアウトされた状態
対策2 smtpfeed の導入
それでもキューから nifty宛てに メールが吐けないので
smtpfeed を導入したわけです
smtpfeed だと 同じMX のサーバだと コネクションを切らずに
続けて smtpでのお話をしてくれます
この辺は /usr/sbin/sendmail -q -v
とすると キューに溜まったメールを吐き出す状況が見えるので
分かりやすいです
単体のsendmail の場合と smtpfeed 導入した場合とで動きの違いが
良く分かります
>
> カーネル再構築しか手がないのでしょうか。そのパッチでどのくらいのファイルオープ
> ン数の増加が見込めるのでしょうか・・
たしか 3000ぐらいだったと思います
Linux 2.2.xx カーネルのほうは 自分で解決
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/proc.txt.html
に記述が ありました (^^ゞ
file-nr / file-max 関連
*********************************
タロン
<taron@xxxxxxxxxxxxxxx>
他論 ではなぁい
*********************************