sendmailでシステムの負荷を考慮する




どのようなシステムにおいても言えることだが、負荷が高くなった場合、
処理能力の限界に達してシステムがハングアップしてしまうことを避けるため、
ある閾値まで負荷が高くなったら、新たな処理要求を受け付けないようにして、
処理中のプロセスをまず処理しようとする考え方がある。

sendmailにも同様の設定がある。
sendmail.cfに、以下のように記載されている。
#O RefuseLA=12

これは、sendmailがインストールされているシステムの「CPU load average」が12を超えたら、
新たな転送要求を受付ないということ。

実際のシステムで動作は確認した。
メーリングリストによる配信によって、大量の転送要求が送りつけられた際に、
sendmailのプロセスを監視しているヘルスチェックが失敗していた。
調査した結果、その時に「CPU load average」が12に達していた。
sendmailの本機能により新しい要求を受け付けないようになっていたため、
ヘルスチェックが失敗したのだ。
新たな転送要求を受け付けなかった間にたまった処理をこなすことで「CPU load average」が低下すると、
新たな転送要求を受け付けるようになった。

○sendmail.mcよる変更方法
define(`confREFUSE_LA', `30')dnl
30が閾値