It seems that viruses CAN slip through MailScanner under high load!

Julian Field mailscanner at ecs.soton.ac.uk
Wed Sep 3 14:52:33 IST 2003


Please can you double and triple check that you have the correct version of
SweepViruses.pm.
Please
         pwd
         ls -l SweepViruses.pm
         sum SweepViruses.pm
and mail me the output.

At 14:41 03/09/2003, you wrote:
>Hi
>
>Bad news I'm afraid. We've just upgraded to MailScanner 4.23-11 and
>viruses are still slipping through.  Admittedly our server is still
>under load.
>
>Thanks for any help.
>
>Joan
>
>
>
>On Fri, 29 Aug 2003 03:16:47 +0100 Brian Hoy <brian.hoy at OPUS.CO.NZ>
>wrote:
>
> > Hi all,
> >
> > Thanks to everyone for their comments and advice.  It is very much
> > appreciated.  And especially to Julian for finding and fixing the
> problem so
> > quickly!
> >
> > Our sendmail config does have the load settings configured that many of you
> > mentioned, but still the mail was flowing in!  The input queue was growing
> > faster than Mailscanner could scan it, and the problem just kept
> compounding.
> >
> > The reason is that the "load average" stats are not always a good
> measure of
> > the real stress that the machine is under.  If a machine is heavily using
> > swap space, then the disks and motherboard I/O bandwidth are being consumed
> > (and CPU also if the disks are ATA, rather than SCSI), yet no useful
> work is
> > being done.
> >
> > If a process is waiting on a page fault, I do not think that it is
> placed in
> > the OS's run queue until the page is loaded (and another page swapped out -
> > still more disk I/O!).  If this is true then the load average does not
> > increase, yet the machine is clearly starting to struggle with the load.
> > This is what happened to us the other day.
> >
> > If you want to experiment with this idea, compile this C program:
> >
> > // Compile with gcc -o vm_tester vm_tester.c
> > //
> > #include <stdio.h>
> > #include <malloc.h>
> >
> > #define NUM_PASSES 10
> > #define MB_TO_ALLOC 128
> > #define BYTES_TO_ALLOC (MB_TO_ALLOC * 1024*1024)
> >
> > int main(void)
> > {
> >   char *mem;
> >   int pass, r, c;
> >
> >   if ((mem = (char *) malloc(BYTES_TO_ALLOC)) == NULL)
> >   {
> >     printf("malloc() failed");
> >     exit(-1);
> >   }
> >
> >   for (pass=0; pass<NUM_PASSES; pass++)
> >   {
> >     for (c=0; c<4096; c++)
> >     {
> >       for (r=0; r<BYTES_TO_ALLOC/4096; r++)
> >       {
> >         mem[r*4096 + c]++;
> >       }
> >     }
> >   }
> >
> >   return 0;
> > }
> >
> > // -----------------------------------------------
> >
> > It allocates 128M of RAM, and increments bytes in a way that generates as
> > many page faults as possible.  As an initial suggestion, run as many of
> > these programs as needed to consume all your RAM and watch your other
> > processes struggle to get a slice of the CPU.  BTW, don't do this on a
> > production server, or try to consume more memory than your total VM - you
> > have been warned!
> >
> > Use top and vmstat to watch things.  If you start running more of these
> > programs, then you find that the load average does not increase that much,
> > but your disks are flat out, and machine responsiveness goes right out the
> > window (esp on ATA disks).
> >
> > I still think my suggestion (in my first post) for an "unfair" way of
> > selecting messages for scanning under "high load" has merit.  When our mail
> > gateway was stressed out the other day, I was using strace to monitor the
> > system calls in the MailScanner processes, and they were spending 5-30mins
> > just doing the stat() calls before locking messages for scanning.
> >
> > When you machine is really overloaded, let's do anything to concentrate the
> > meagre available resources on clearing the queue in the most expedient
> fashion.
> >
> > Perhaps "high load" can be determined by the length of the input queue
> > (rather than the misleading system load average), and be user configurable.
> >
> > For example, if the input queue has in excess of 1000 messages waiting,
> peel
> > off any 30 for scanning.  Ensure that no other MailScanner process
> evaluates
> > the length of the queue until a user configurable time has passed (15
> > mins?).  I know this is easier said than done, but I think it really would
> > help when the machine is steaming up shit creek.
> >
> > Another thought....Sendmail names all it's df and qf files, such that an
> > alphabetical listing is sorted by ascending time order too!  If the other
> > MTAs are the same, then perhaps this fact could be used to remove all the
> > stat()s and still meet the fairness algorithm?
> >
> > Comments anyone?
> >
> > Regards,
> > Brian
>
>----------------------
>Joan Bryan
>Unix Systems Administrator
>Information Systems
>Telephone: +44 (0) 20 7848 2671
>mailto:joan.bryan at kcl.ac.uk

--
Julian Field
www.MailScanner.info
MailScanner thanks transtec Computers for their support



More information about the MailScanner mailing list