X

How to reduce the SpamAssassin load

If you are running a SpamAssassin ‘daemon’ on your VPS or Dedicated Server to look out for spam messages on your site, you should know that it can create multiple (typically 5) threads/processes and each of those threads can use a very large amount of memory, which can slow down the overall server performance or lead to possible Out Of Memory (OOM) errors .

SpamAssassin works very well with just one thread. So you can reduce the ‘children’ setting and reclaim some memory on your server for other apps to run with.

You can use the following shell script to do so:

#!/bin/bash
for location in /etc/default/spamassassin /etc/sysconfig/spamassassin; do
if [ ! -e $location ]; then continue; fi
replace “SPAMDOPTIONS=\”-d -c -m5 -H” “SPAMDOPTIONS=\”-d -c -m1 -H” — /etc/init.d/spamassassin
replace “\-m 10 ” “-m 1 ” — $location
replace “\-m 5 ” “-m 1 ” — $location
replace “\-m5 ” “-m1 ” — $location
replace “max-children 5 ” “max-children 1 ” — $location
done

Don’t forget to make the file executable with the following command: chmod +x /root/memmon.sh

Another thing to know about SpamAssassin is that any /etc/procmailrc entry only does one SpamAssassin check at a time. Otherwise, if you receive a batch of incoming emails, they will all be processed in parallel. This could cause your server’s CPU usage to spike, slowing down your other apps, and it may cause your server to run out of memory.

To make procmailrc run only one email at a time through SpamAssassin, use a lockfile on your recipe line, e.g. change the top line from:

:0fw:
# The following line tells Procmail to send messages to SpamAssassin only if they are less than 256000 bytes. Most spam falls well below this size and a larger size could seriously affect the performance.)
* < 256000 | /usr/bin/spamc To: :0fw:/etc/mail/spamc.lock # The following line tells Procmail to send messages to SpamAssassin only if they are less than 256000 bytes. Most spam falls well below this size and a larger size could seriously affect the performance.) * < 256000 | /usr/bin/spamc

admin: