[Mailman-Developers] Some notes on my stuff...

Graham TerMarsch graham@howlingfrog.com
Mon, 23 Jul 2001 19:56:15 -0700

On Monday 23 July 2001 08:41, Bill Bradford wrote:
> On Sun, Jul 22, 2001 at 10:15:15PM -0700, Chuq Von Rospach wrote:
> > My testing showed the major processing delay was the speed of uptake
> > by sendmail, primarily due to DNS delays. And given that you can't
> > turn off DNS lookups without turning off a lot of the anti-spam stuff,
> > you're kinda stuck.
> I went from sendmail to postfix, and saw at least a 10x speed
> improvement (from 12-hours-max from sending an email to a list to
> receiving it, to 12 *minutes*.)  Turns out Sendmail was choking on the
> "backlog" queue of deferred/undeliverable email.  Postfix basically says
> "okay, I"ll try this later, and i'll deliver the email now that CAN be
> delivered".

>From some of the "announcement only" lists that I manage for my customers, 
we found similar things, but managed to do it by firing up different 
copies of Sendmail periodically to run the mail queue.  We too had similar 
problems with Sendmail stalling when it'd hit some domain that didn't 
resolve properly or that took forever to connect to, and it slowed the 
whole process right down.

After doing some tweaking and twiddling, we've now got Sendmail configured 
with several different types of queue runners that we fire up via cron:

- One that runs with really _short_ timeouts, to go deep into the mail 
queue and send stuff out as quick as possible, without bothering to wait 
for long DNS resolves or slow net connections.

- One that runs with really _long_ timeouts, to try to process those msgs 
going to hosts that just happen to be on the end of really slow links on 
the net.

- And a whole bunch in the middle that we fire up to process mail based on 
destination domain.  By doing a "mailq" and grabbing/counting the 
destination domains, we can figure out where most of the mail is going, 
and then use "sendmail -qR" to fire up one (or more) queue runners to 
deliver mail out to those domains.

It did take us a bit of twiddling to get the queue runners to fire up and 
send things out at full tilt without overloading the machine, but after we 
got those wrinkles all worked out, we found that Sendmail worked extremely 
well (and _MUCH_ better than it did with an "out of the box" config).

Also found that two Sendmail config options that made a _TON_ of 
difference, were "HostStatusDirectory" and "SingleThreadDelivery".  The 
first one lets you share your host up/down status amongst all of the 
running Sendmail procs, while the other keeps you from overloading any one 
particular destination server by only allowing a single connection to it 
from your end.


And lastly, I think I've got to agree wholeheartedly with Chuq on his 
notes about spindle usage and IO bandwidth being one of (if not _the_) big 
limiting factors in delivering mail.  This same machine I've discussed 
above saw a fourfold improvement in mail throughput by pulling the mail 
spool off onto an underused spindle.

I know Sendmail is generally chastized as being slow and doggish as far as 
SMTP servers go, but from having twiddled with it enough lately, I'm 
beginning to wonder if thats just because the default config that it 
builds with is sluggish (as I've been able to get ~8-10x throughput from 
the same server just from reshuffling and retuning the config and the 
queue runners).

Graham TerMarsch