From: Mike Rumph and a request is made for the URI and a request is made for the URI This at least avoids the extra checks for the
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.
@@ -262,7 +262,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 On some platforms, this memory-mapping improves performance.
@@ -298,7 +298,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 On most platforms, using sendfile improves performance by eliminating
@@ -338,7 +338,7 @@
setting. So a server being accessed by 100 simultaneous
clients, using the default MaxRequestWorkers
setting, so that your server
+ should, control the MaxRequestWorkers
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
@@ -167,8 +167,8 @@
</Directory>
- /index.html
.
- Then Apache will perform lstat(2)
on
+ /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
@@ -187,7 +187,7 @@
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,
@@ -225,7 +225,7 @@
- mmap(2)
.sendfile(2)
operation.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 absence.
If, on the other hand, you have modules statically linked
@@ -602,7 +602,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
- just block in accept(2)
until a connection
+ experience any of these same problems because all the 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
@@ -715,7 +715,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.)
When this feature was added to Apache, it caused a flurry of problems on various versions of Unix because of shortsightedness. @@ -854,7 +854,7 @@
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