Thanks, Joe and Jon for your helpful thoughts regarding my Apache
memory problem.  Here's some more information:

Joe> > 1-0    15823    W     0.00    1742573500    GET /out/388.mp3
Joe> > 2-0 15824 W 0.00 1742573499 GET /out/238.mp3
Joe>
Joe> Are these all simple static files, or is /out/ handled by some CGI
Joe> script etc?

Joe, you're right - they do get passed through a Perl script for
processing.  However, unless I'm mistaken, I don't THINK the following
code would produce the kind of problems I'm seeing:

my $filesize = (stat($sermonfile))[7];
print "Content-Disposition: inline;filename=$sermonfile_short\n";
print "Content-Length: $filesize\n";
print "Content-Type: application/octet-stream\n\n";
open(SERMONFILE, $sermonfile);
binmode(SERMONFILE);
binmode(STDOUT);
my $chunk;
while (read(SERMONFILE,$chunk,1024)) {
   print $chunk;
}
close SERMONFILE;

But even in the worst case, where a bad script reads in the entire 18M MP3
file into memory, that STILL wouldn't seem to account for my 2Gig
memory loss...

------------------------------------

Jon> If your clients are downloading 18Mb files over slow links they
Jon> may keep trying the connection, breaking the original therefore
Jon> leaving you with multiple connections to the same file from the
Jon> same client.

Jon, in this particular case I don't think that's happening.  I
generally don't have very long to test stuff because once the memory is
exhausted by Apache proceses, my SSH connections to the server slow to
a crawl, and even logging in at the console becomes nearly impossible.

I was fortunate enough to catch this occurrence before the memory was
completely used up.  As the RAM got dangerously low, I decided to shut
down all my Apache processes and waited about 2 minutes just to see
what the memory looked like.  Without Apache running, I was back to
about 1.6 Gig free.) Then, while keeping an eye on "top" and the
/server-status page, I started Apache again.

Immediately the visitor's download accelerator program began hitting my
site again.  Within seconds all 20 Apache processes were in use (by
the one guy), and before 2 minutes had elapsed, I was forced to
shutdown all Apache processes as my total memory fell below 50M.  I was
able to quickly grab those "top" and "/server-status" shots just before
I killed all the Apache clients.

So in my case, I don't think the problem is half-closed connections or
timeouts.  Under the right circumstances of heavy downloading, a virgin
Apache server can exhaust my 2Gig of memory in less than 2 minutes.

Jon> Your 20 concurrent connections are limited by MaxClients. I assume
Jon> you are keeping this small because of the size they are growing to
Jon> as you should be able to get to approx 175-200 of the top of my
Jon> head using prefork with 1Gb of memory. I would have thought this
Jon> would max out pretty quickly with many 18Mb downloads as they will
Jon> take time.

Yes, normally I would have MaxClients set to something larger.  Setting
it to 20 has been something of a desperation measure, trying to keep
the memory usage under control.  Apparently it's not working.



---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: [EMAIL PROTECTED]
  "   from the digest: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to