On 2013-05-25 10:05, Sindhi Sindhi wrote:
You have answered all my questions and thanks a lot. Had two questions
more, appreciate your response.
1.
As of now, my httpd.conf file has the below lines-
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf
This means Apache does not read the httpd-mpm.conf file during startup. And
so it uses the default settings for "Max number of requests it can support"
and "Max number of threads it creates per child process"
Where can I find what default values Apache uses for the following -
- Upto how many concurrent requests will Apache support by default
- Max number of threads that one child process creates
For ex. if I want Apache to handle upto 400 concurrent requests at a time,
how will I know that this 400 is within the default settings that Apache
uses.
Have a look here, depending on your version of apache.
http://httpd.apache.org/docs/2.2/mod/mpm_common.html
http://httpd.apache.org/docs/2.4/mod/mpm_common.html
The number of threads per process is given in ThreadsPerChild.
You typically tweak
ServerLimit (the maximum number of children that are simultaneously alive)
ThreadLimit (the maximum sum of alive threads in all children)
StartServers (how many children are created upon startup)
ThreadsPerChild
MaxRequestWorkers (or MaxClients in 2.2) (the maximum number of requests
that are served simultaneously)
MaxConnectionsPerChild (or MaxRequestsPerChild in 2.2) (after a child
has served that many requests, it exits and is potentially replaced with
a new child; avoids memleaks)
MinSpareThreads and MaxSpareThreads, the minimum and maximum number of
spare threads.
There are some constraints on the arguments of these directives, which I
do not master. I think that MaxRequestWorkers <= ThreadsPerChild *
ServerLimit and that MaxRequestWorkers and ThreadLimit should be
divisible by ThreadsPerChild, but as I said, I do not master. If you get
them wrong, apache adjusts the values automatically and informs you
about it upon startup.
I am not sure, maybe others on the list can confirm or deny, but I think
that apache does not distinguish between threads and processes in
windows: http://httpd.apache.org/docs/2.4/mod/mpm_winnt.html or
http://httpd.apache.org/docs/2.2/mod/mpm_winnt.html. So I think that
ServerLimit = 1 in Windows and probably MaxConnectionsPerChild is not
used or does not exist.
You may also have a look at KeepAlive On|Off, MaxKeepAliveRequests and
KeepAliveTimeout (http://httpd.apache.org/docs/2.4/mod/core.html)
If my module is on the internet with hundreds of thousands of possible
client IPs that issue one request and then leave, I set KeepAlive Off.
If my module is on the intranet and is accessed by a couple of
webservices that continuously issue requests, I set it On with a short
timeout. Performance-wise the KeepAlive directive makes a huge difference.
2.
My understanding is, once a request is completely processed, Apache frees
the pool of only this request and does not free any other request's pool.
And other request pools will be freed only when those requests are
completely processed. Kindly confirm my understanding to be correct.
Yes, it is correct.
Sorin