From edbc3187c16835c56c28d1a5bc8903ea837d2a51 Mon Sep 17 00:00:00 2001
From: Mike Rumph
write() to the socket returns EWOULDBLOCK or EAGAIN, to become writable again after an idle time. The worker holding the socket might be able to offload the waiting task to the listener thread, that in turn will re-assign it to the first idle worker thread available once an event will be raised for the socket (for example, "the socket is now writable"). Please check the Limitations section for more information.
+ write() to the socket returns EWOULDBLOCK or EAGAIN to become writable again after an idle time.
+ The worker holding the socket might be able to offload the waiting task to the listener thread, that in turn will re-assign it to the first idle worker thread available once an event will be raised for the socket (for example, "the socket is now writable").
+ Please check the Limitations section for more information.
This mpm showed some scalability bottlenecks in the past leading to the following +
This mpm showed some scalability bottlenecks in the past, leading to the following
error: "scoreboard is full, not at MaxRequestWorkers".
EWOULDBLOCK
or EAGAIN is returned, delegating the rest to the listener. This one in turn
- waits for an event on the socket, and delegates the work to flush the rest of the content
- to the first idle worker thread. Meanwhile in the latter example (FCGI/CGI/proxied content)
+ waits for an event on the socket and delegates the work to flush the rest of the content
+ to the first idle worker thread. Meanwhile in the latter example (FCGI/CGI/proxied content),
the MPM can't predict the end of the response and a worker thread has to finish its work
before returning the control to the listener. The only alternative is to buffer the
response in memory, but it wouldn't be the safest option for the sake of the
@@ -211,7 +216,7 @@ of the Before these new APIs where made available, the traditional select and poll APIs had to be used.
Those APIs get slow if used to handle many connections or if the set of connections rate of change is high.
- The new APIs allow to monitor much more connections and they perform way better when the set of connections to monitor changes frequently. So these APIs made it possible to write the event MPM, that scales much better with the typical HTTP pattern of many idle connections.
The MPM assumes that the underlying apr_pollset
implementation is reasonably threadsafe. This enables the MPM to
@@ -241,7 +246,7 @@ of the
libkse (see man libmap.conf).To mitigate this problem, the event MPM does two things:
The
The maximum length of the queue of pending connections.
- Generally no tuning is needed or desired, however on some
- systems it is desirable to increase this when under a TCP SYN
+ Generally no tuning is needed or desired; however on some
+ systems, it is desirable to increase this when under a TCP SYN
flood attack. See the backlog parameter to the
listen(2) system call.
For threaded and hybrid servers (e.g. 16 (25 (0, then the process will never expire.
Setting
For MaxSpareThreads 250. These MPMs deal with idle threads
on a server-wide basis. If there are too many idle threads in the
- server then child processes are killed until the number of idle
+ server, then child processes are killed until the number of idle
threads is less than this number. Additional processes/threads
might be created if
MinSpareThreads 75 and deal with idle threads on a server-wide
- basis. If there aren't enough idle threads in the server then child
+ basis. If there aren't enough idle threads in the server, then child
processes are created until the number of idle threads is greater
than number. Additional processes/threads
might be created if
MinSpareThreads 10 and, since it is a single-process
- MPM, tracks this on a server-wide bases.
File-based shared memory is useful for third-party applications that require direct access to the scoreboard.
-If you use a
If you use a