From: Mike Rumph MaxClients
setting, so that your server
+ should, control the MaxClients
setting so that your server
does not spawn so many children that it starts swapping. The procedure
for doing this is simple: determine the size of your average Apache
process, by looking at your process list via a tool such as
@@ -172,8 +172,8 @@
</Directory>
and a request is made for the URI /index.html
.
- Then Apache will perform lstat(2)
on
+
and a request is made for the URI /index.html
,
+ then Apache will perform lstat(2)
on
/www
, /www/htdocs
, and
/www/htdocs/index.html
. The results of these
lstats
are never cached, so they will occur on
@@ -197,7 +197,7 @@
This at least avoids the extra checks for the
DocumentRoot
path.
- Note that you'll need to add similar sections, if you
+ Note that you'll need to add similar sections if you
have any Alias
or
RewriteRule
paths
outside of your document root. For highest performance,
@@ -238,7 +238,7 @@
-
If at all possible, avoid content negotiation, if you're +
If at all possible, avoid content negotiation if you're really interested in every last ounce of performance. In practice the benefits of negotiation outweigh the performance penalties. There's one case where you can speed up the server. @@ -277,7 +277,7 @@
In situations where Apache 2.x needs to look at the contents
of a file being delivered--for example, when doing server-side-include
- processing--it normally memory-maps the file, if the OS supports
+ processing--it normally memory-maps the file if the OS supports
some form of mmap(2)
.
On some platforms, this memory-mapping improves performance. @@ -313,7 +313,7 @@
In situations where Apache 2.x can ignore the contents of the file
to be delivered -- for example, when serving static file content --
- it normally uses the kernel sendfile support for the file, if the OS
+ it normally uses the kernel sendfile support for the file if the OS
supports the sendfile(2)
operation.
On most platforms, using sendfile improves performance by eliminating
@@ -353,7 +353,7 @@
setting. So a server being accessed by 100 simultaneous
clients, using the default StartServers
of 5
would take on
the order of 95 seconds to spawn enough children to handle
- the load. This works fine in practice on real-life servers,
+ the load. This works fine in practice on real-life servers
because they aren't restarted frequently. But it does really
poorly on benchmarks which might only run for ten minutes.
LoadModule
directive for that module.
- This allows you to experiment with removing modules, and seeing
+ This allows you to experiment with removing modules and seeing
if your site still functions in their absense.
If, on the other hand, you have modules statically linked
@@ -622,7 +622,7 @@
accomplishing nothing. Meanwhile none of those children are
servicing requests that occurred on other sockets until they
get back up to the select
again. Overall this
- solution does not seem very fruitful, unless you have as many
+ solution does not seem very fruitful unless you have as many
idle CPUs (in a multiprocessor box) as you have idle children
(not a very likely situation).
The above is fine and dandy for multiple socket servers, but
what about single socket servers? In theory they shouldn't
- experience any of these same problems, because all children can
+ experience any of these same problems because all children can
just block in accept(2)
until a connection
arrives, and no starvation results. In practice this hides
almost the same "spinning" behavior discussed above in the
non-blocking solution. The way that most TCP stacks are
implemented, the kernel actually wakes up all processes blocked
in accept
when a single connection arrives. One of
- those processes gets the connection and returns to user-space,
- the rest spin in the kernel and go back to sleep when they
+ those processes gets the connection and returns to user-space.
+ The rest spin in the kernel and go back to sleep when they
discover there's no connection for them. This spinning is
hidden from the user-land code, but it's there nonetheless.
This can result in the same load-spiking wasteful behavior
@@ -802,7 +802,7 @@
an HTTP server to reliably implement the
protocol, it needs to shut down each direction of the
communication independently. (Recall that a TCP connection is
- bi-directional, each half is independent of the other.) This
+ bi-directional. Each half is independent of the other.) This
fact is often overlooked by other servers, but is correctly
implemented in Apache as of 1.2.
accept(2)
serialization. On this
particular platform, the worker MPM uses an unserialized accept by
- default, unless it is listening on multiple ports./65: lwp_park(0x00000000, 0) = 0 /67: lwp_unpark(65, 1) = 0