Yes, this is my theory also.  I figured this out a while back, and started a
thread on this list, but since then haven't had enough time to investigate
it further.

The thread is here:

  http://mathforum.org/epigone/modperl/wherdtharvoi

which includes some helpful hints from Doug on how to call mlockall() from
the mod_perl parent process.

HTH.. I'm very curious to know if this works.

-Adi

Ed Grimm wrote:
> 
> I believe I have the answer...
> 
> The problem is that the parent httpd swaps, and any new children it
> creates load the portion of memory that was swaped from swap, which does
> not make it copy-on-write.  The really annoying thing - when memory gets
> tight, the parent is the most likely httpd process to swap, because its
> memory is 99% idle.  This issue aflicts Linux, Solaris, and a bunch of
> other OSes.
> 
> The solution is mlockall(2), available under Linux, Solaris, and other
> POSIX.1b compliant OSes.  I've not experimented with calling it from
> perl, and I've not looked at Apache enough to consider patching it
> there, but this system call, if your process is run as root, will
> prevent any and all swapping of your process's memory.  If your process
> is not run as root, it returns an error.
> 
> The reason turning off swap works is because it forces the memory from
> the parent process that was swapped out to be swapped back in.  It will
> not fix those processes that have been sired after the shared memory
> loss, as of Linux 2.2.15 and Solaris 2.6.  (I have not checked since
> then for behavior in this regard, nor have I checked on other OSes.)
> 
> Ed
> 
> On Thu, 14 Mar 2002, Bill Marrs wrote:
> 
> > >It's copy-on-write.  The swap is a write-to-disk.
> > >There's no such thing as sharing memory between one process on disk(/swap)
> > >and another in memory.
> >
> > agreed.   What's interesting is that if I turn swap off and back on again,
> > the sharing is restored!  So, now I'm tempted to run a crontab every 30
> > minutes that  turns the swap off and on again, just to keep the httpds
> > shared.  No Apache restart required!
> >
> > Seems like a crazy thing to do, though.
> >
> > >You'll also want to look into tuning your paging algorithm.
> >
> > Yeah... I'll look into it.  If I had a way to tell the kernel to never swap
> > out any httpd process, that would be a great solution.  The kernel is
> > making a bad choice here.  By swapping, it triggers more memory usage
> > because sharing removed on the httpd process group (thus multiplied)...
> >
> > I've got MaxClients down to 8 now and it's still happening.  I think my
> > best course of action may be a crontab swap flusher.
> >
> > -bill

Reply via email to