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