How to make Apache (2.2.4) less greedy, or Sendmail less polite?

Dan Nelson dnelson at allantgroup.com
Thu May 3 23:17:34 UTC 2007


In the last episode (May 04), Olaf Greve said:
>  Recently I upgraded my Apache 1.3.33 webserver to Apache 2.2.4, and
>  ever since, I noticed that it is acting in such a way that it often
>  is VERY greedy with my server's resources. Quite often, when running
>  "top", a list that is as the one that appears at the bottom of this
>  e-mail is shown: indeed pretty much solely httpd instances, that for
>  extended periods of time almost continously pull the CPU to close to
>  100%, and that also consume a lot of the memory resources... 
>  Strangely enough, at other times the CPU load is just slightly above
>  0%, say 0.4% or so...
> 
>  Apart from the fact that it "doesn't feel right" to see the CPU for
>  substantial amounts of time, almost constantly close to 100%, there
>  is a further issue, being that sendmail rejects connections when the
>  server load is (too) high. This is very annoying, as e-mail is also
>  a crucial part of the server's functionality, and I don't want
>  sendmail to reject connections, each and every time that Apache goes
>  berserk.
> 
>  Now, the machine in question, is an AMD-64 machine, and it runs the
>  AMD-64 version of FreeBSD (5.4-release) with a custom kernel.
>  Surely, Apache can be reconfigured such that it doesn't behave so
>  selfishly, and leaves a decent amount of resources for other stuff
>  (such as sendmail) on the machine too.
> 
>  What I'm basically trying to find out is:
>  1-Is this normal, or can this perhaps be some (brute force) hack attempt, 
>  where something is pounding Apache heavily, trying to find/exploit some 
>  security risk?
>  2-How can I inspect exactly what each httpd instance is doing (i.e. which 
>  request it is serving)?
>  3-How to best configure Apache 2.2.4 such that it will never use more than a 
>  specific amount of the system's resources (e.g. a CPU usage limit of 75%, 
>  and a memory limit of say 1GB)? It would be my guess that the amount of 
>  "MaxClients" should be lowered, but is that sufficient (note: current 
>  httpd-mpm.conf settings apper at the end of this e-mail, and indicate an 
>  amount of 150), and will that not somehow (all too) negatively affect the 
>  way Apache handles requests?
>  4-How to perhaps tell sendmail to be a bit more selfish, and stop it from 
>  rejecting connections for extended periods of time? (note: we all know just 
>  how much "fun" it can be to configure Sendmail :P so for now I've only 
>  included (a shortened version of the) RX daemon config file, and hope 
>  someone can give me a good pointer for this - or tell me where else to 
>  look).
>  5-When sendmail rejects (incoming) connections, does mail actually get lost, 
>  or will it (always) be handled later, when the server is less occupied?

I can't help you with Apache, but it's easy to tell sendmail to ignore
system load and deliver mail no matter what:

http://www.sendmail.org/m4/tweaking_config.html#confQUEUE_LA

Change these lines in your .mc file:

  dnl define(`confDELAY_LA,    8)
  dnl define(`confREFUSE_LA', 12)

to 

  define(`confQUEUE_LA', 999)
  define(`confDELAY_LA', 999)
  define(`confREFUSE_LA', 999)
  
They are more useful on a system that's only handling email, so if
someone starts sending evil attachments that chew up CPU time being
virus or spam-scanned, the server will just start throttling mail
delivery.  If the load isn't being caused by mail delivery, it's better
to bump it wayy up.

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-amd64 mailing list