以前書いたように、SpamAssassinをProcmail経由で処理させているときの話。
SpamAssassinを複数プロセス立ち上げても、どうも並列処理はされないし速度も速くならなくて、メーリングリストなどで大量のメールが送られてくると、ProcmailでSpamAssassinを立ち上げるところでボトルネックになってしまいます。
実はPostfixは、デフォルトではメールボックスの処理を同時に1通しか処理しないようになっています。
確かに、並列処理してしまうと、時系列順にメールボックスに入らなくなったりする可能性がありますので、このようになっているのだと思います。
それにあわせて「mailbox_command」にProcmailを指定して処理させているときも、1通ずつしかメールを処理してくれません。
そうするとおのずと、SpamAssassinも1通づつしかメールを処理しません。
この並列処理数を増やすには、Postfixで「local_destination_recipient_limit」という設定を変更します。
postfix/main.cfに、
local_destination_recipient_limit = 2
上記のように記述すると、同時に2通のメールをメールボックスで処理しますので、「mailbox_command」も2通同時に処理されます。
SpamAssassinも2通並列で処理してくれますので、大量のメールも高速でさばいてくれます。
SpamAssassin自体は重いですけどね。
ちなみに、「mailbox_command」などのコマンドの実行時間を設定するには、「command_time_limit」という設定を変更します。
デフォルトは1000sなので、倍にするには、postfix/main.cfに
command_time_limit = 2000s
のように記述します。
Postfixは様々な設定があって、動作を詳細に設定できていいですね。
コメントする