これが私がやったことです。
多くのメッセージがほぼ同時に配信される傾向があるセットアップがあります。一連の実験では、一時スプールにコピーされ、cronジョブによって5分ごとに配信されるメッセージに対してSAを実行します。
spamd
「max-childrenパラメーターを増やす必要があるかもしれません」と印刷を続け、一度に最大40に上げましたが、サーバーがすべてのスワップスペースを消費してクラッシュしました。
現在、配信がProcmailロックファイルによって管理されている別の体制を実装しています。簡単だったので、プロセスIDの最後の数字を使用し、10人の子で実行しました。これが最適であるかどうかはまったくわかりませんが、これは経験によって時々経験する極悪な負荷ピークを回避するのに役立ちました。
LINEBUF=10240
# Grab last digit of PID for lockfile
PID=$$
:0
* PID ?? ()\/[0-9]$
{ D=$MATCH }
:0
* > 512000
{ SA="(too large)" }
:0Ew:/tmp/20spamc.$D
SA=| spamc -p 38783 -l -y
さらに、私spamd
はいくつかのulimit
制限から始めます。制限を取り除いた以外は、http://svn.apache.org/repos/asf/spamassassin/trunk/contrib/run-massesから数字を取り出しましたulimit -u
。(何が起こっているのかわからない。どんな場合でも32は小さすぎる。500のようなものでspamd
しばらく走り続けることができたが、最終的には限界に達する。)
ulimit -v 204800
ulimit -m 204800
ulimit -n 256
#ulimit -u 32
perl -T -I lib -w spamd --min-children 2 --max-children 10 --max-spare 5 etc etc
負荷が長時間にわたって高すぎると、配信に失敗することになると思いますが、これまでのところ、これで管理可能なレベルまで負荷を減らすことができたようです。そして、失敗した配信の束は、スワップが不足しているマシンよりもはるかに優れています。