[exim] Exim + procmail (very high load)

Top Page
Delete this message
Reply to this message
Author: Stanczak Slawomir
Date:  
To: exim-users
Subject: [exim] Exim + procmail (very high load)
Hello,

Sorry for the very long letter.

I have a problem with the connection of exim with procmail. Without
procmail exim works *very* good. When I send a test mail over the script
for one thousand users, the avarage load is about 2.50 - 3.00.

#!/bin/bash

MAIL=$HOME/Maildir/
export MAIL

if [ -f ./message -a -s ./message ]
    then
      echo "Sending mail for all users..."
      for u in $(cat ./mail-users); do
          mailx -s "Test" $u < ./message
      done
exit


There are a few Exim processes during the delivery:

ara:~# ps -ef | grep exim
100       3375     1  0 14:02 ?        00:00:00 /usr/sbin/exim4 -bd -q30m
root     13849     1  0 14:18 ?        00:00:00 /usr/sbin/exim4 -Mc 
1Oy1nb-0003bM-G8
xdori    13852 13849  0 14:18 ?        00:00:00 [exim4] <defunct>
root     13858 12220  0 14:18 pts/2    00:00:00 grep exim


This is o.k.

Exim + Procmail (router and transport sections)
-----------------------------------------------
procmail:
debug_print = "R: procmail for $local_part@$domain"
driver = accept
domains = +local_domains
check_local_user
transport = procmail_pipe
require_files = ${local_part}:+${home}:+/usr/bin/procmail
no_verify
no_expn

procmail_pipe:
debug_print = "T: procmail_pipe for $local_part@$domain"
driver = pipe
path = "/bin:/usr/bin:/usr/sbin"
command = "/usr/bin/procmail -d $local_part"
return_path_add
delivery_date_add
envelope_to_add

When I include this sections and I run this script many procmail
processes appear and within a few seconds load average reaches value
400-500.

What interesting if after that I run this script second time again,
the avarage load is low (2.5 - 3) and the number of procmail processes
is low.

I tested it many times. It shows allways during the first run of the
script after system reboot.

I did another test. I sent from my other mail host 60-100 letters
on aliass to all useres (60x1000 messages) on this server but the max load
never exceeded value 50.0.

I did another test. I sent from my other mail host 100 letters to aliass
for all useres (100x1000 messages) on this server but the max load never
exceeded value 55.0.

I checked variables:

cat /etc/profile:
[...]
MAIL=$HOME/Maildir/
MAILDIR=$HOME/Maildir/
export MAIL MAILDIR

cat /etc/login.defs
MAIL_DIR       Maildir/


I changed commands in scripts ("mailx" to "mutt").

I checked procmail files:

Main file:
-----------------
cat /etc/procmail
MAIL=$HOME/Maildir/
PATH=/usr/bin:/bin:/usr/sbin:$HOME/bin:.
MAILDIR=$HOME/Maildir/
DEFAULT=$HOME/Maildir/
LOGFILE=$HOME/Maildir/procmail.log
#VERBOSE=yes
#LOGABSTRACT=all
# Use a system-wide /etc/procmailrc (ignore $HOME/.procmailrc)
DROPPRIVS=no
------------

and users file;
---------------
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir/
DEFAULT=$HOME/Maildir/
LOGFILE=$HOME/Maildir/procmail.log
LOCKFILE=$HOME/Maildir/.lockmail
BOGOFILTER_DIR=$HOME/.bogofilter
TRASH=$HOME/Maildir/.Quarantine/

:0 H:
* < 200000
* 0^0
* 1^1 ^(From|To|Content-Type|Subject).*koi8-r
* 1^1 ^(From|To|Content-Type|Subject).*(gb2312|big5)
* 1^1 ^(From|To|Content-Type|Subject).*ks_c_5601\-1987
* 1^1 ^(From|To|Content-Type|Subject).*(euc|EUC).(kr|KR)
* 1^1 ^(From|To|Content-Type|Subject).*(iso|ISO).2022.(jp|JP|kr|KR)
$TRASH

:0 B:
* < 200000
* .*ks_c_5601-1987
* .*charset=[.]EUC(-|_)KR
* .*charset=[.]euc(-|_)kr
$TRASH

:0 H:
* < 200000
*
^(From|To|Reply-To|Return-Path).*\.(cc|cn|hk|in|iq|ir|kp|kr|th|tr|tw|vn)\.com
* ^(From|To|Reply-To|Return-Path).*\.(cc|cn|hk|in|iq|ir|kp|kr|th|tr|tw|vn)
$TRASH

:0fw
* < 200000
| bogofilter -p -e -v


:0e
{ EXITCODE=75 HOST }

:0:
* < 200000
* ^Subject:.\*\*\*SPAM\*\*\*
$TRASH

:0:
* < 200000
* ^Subject:.\?\?\?UNSURE\?\?\?
$MAILDIR

:0
$MAILDIR

These changes did not produce any effect.
------------------------------------------------------------------

This is *slow* machine (HP360G5). I tested it on the faster platform
(8 core, 32 GB RAM). Within a few seconds the avarage load reached
value 950 and the system crashed.

Info from the message log:

Sep  4 09:21:59 ara kernel: [ 8973.522891] procmail      D 
0000000000000000     0  8067   8066
Sep  4 09:21:59 ara kernel: [ 8973.571796]  ffff81076a3a5d48 
0000000000000086 0000000000000000 0000000000000000
Sep  4 09:21:59 ara kernel: [ 8973.618943]  ffff81080712c0c0 
ffff81082c9514f0 ffff81080712c348 00000003a022fc43
Sep  4 09:21:59 ara kernel: [ 8973.641745]  0000000100000001 
0000000000000000 00000000ffffffff 0000000000000000
Sep  4 09:21:59 ara kernel: [ 8973.646562] Call Trace:
Sep  4 09:21:59 ara kernel: [ 8973.774846]  [<ffffffff802710a6>] 
sync_page+0x0/0x41
Sep  4 09:21:59 ara kernel: [ 8973.803572]  [<ffffffff80429437>] 
io_schedule+0x5c/0x9e
Sep  4 09:21:59 ara kernel: [ 8973.847019]  [<ffffffff802710e2>] 
sync_page+0x3c/0x41
Sep  4 09:21:59 sci kernel: [ 8973.884952]  [<ffffffff80429692>] 
__wait_on_bit+0x40/0x6e
Sep  4 09:21:59 ara kernel: [ 8973.933370]  [<ffffffff8027132d>] 
wait_on_page_bit+0x6b/0x71
Sep  4 09:21:59 ara kernel: [ 8973.980036]  [<ffffffff8024619f>] 
wake_bit_function+0x0/0x23
Sep  4 09:21:59 ara kernel: [ 8974.004037]  [<ffffffff80278dfa>] 
pagevec_lookup_tag+0x1a/0x21
Sep  4 09:21:59 ara kernel: [ 8974.046710]  [<ffffffff80271844>] 
wait_on_page_writeback_range+0x66/0x113
Sep  4 09:21:59 ara kernel: [ 8974.070277]  [<ffffffff80246171>] 
autoremove_wake_function+0x0/0x2e
Sep  4 09:21:59 ara kernel: [ 8974.113929]  [<ffffffffa0248d65>] 
:xfs:xfs_fsync+0x3a/0x183
Sep  4 09:21:59 ara kernel: [ 8974.158211]  [<ffffffffa02501d8>] 
:xfs:xfs_file_fsync+0x41/0x49
Sep  4 09:21:59 ara kernel: [ 8974.181369]  [<ffffffff802b971a>] 
do_fsync+0x52/0xa4
Sep  4 09:21:59 ara kernel: [ 8974.228046]  [<ffffffff802b978f>] 
__do_fsync+0x23/0x36
Sep  4 09:21:59 ara kernel: [ 8974.250611]  [<ffffffff8020beda>] 
system_call_after_swapgs+0x8a/0x8f
Sep  4 09:21:59 ara kernel: [ 8974.276945]


I changed the kernel (2.6.32) and file system from xfs on ext3
but no effect.

Thank you in advance for any suggestions

Regards

Slawomir Stanczak