Tune apache2 for more concurrent connections: Difference between revisions

From Open-Xchange
No edit summary
Line 10: Line 10:
<pre><nowiki>
<pre><nowiki>
<IfModule mpm_worker_module>
<IfModule mpm_worker_module>
     ServerLimit         25
     ServerLimit             25
     StartServers         10
     StartServers             10
     MinSpareThreads     75
     MinSpareThreads         75
     MaxSpareThreads     250  
     MaxSpareThreads         250  
     ThreadLimit         64
     ThreadLimit             64
     ThreadsPerChild     32
     ThreadsPerChild         32
     MaxClients         800
     MaxClients             800
     MaxRequestsPerChild  0
     MaxRequestsPerChild  10000
</IfModule>
</IfModule>
</nowiki></pre>
</nowiki></pre>
Line 45: Line 45:
</tr>
</tr>
<tr>
<tr>
<td><b>MaxRequestsPerChild</b></td><td>Defines the number of Connections that a process can handle during its lifetime (keep-alives are counted once). After that it will be killed.</td>
<td><b>MaxRequestsPerChild</b></td><td>Defines the number of Connections that a process can handle during its lifetime (keep-alives are counted once). After that it will be killed. This can be used to prevent possible apache memory leaks. If set to 0 the lifetime is infinite.</td>
</tr>
</tr>
</table>
</table>

Revision as of 07:32, 29 May 2012

The problem

By default apache2 is configured to support 150 concurrent connections. This forces all parallel requests beyond that limit to wait. Especially if, for example, active sync clients maintain a permanent connection for push events to arrive.

The solution

This is an example configuration to provide 800 concurrent connections. Please ensure that your apache is using the mpm_worker module. This allows us to serve lots of concurrent connections by using less RAM than with mpm_prefork as we are going to start much less processes.

<IfModule mpm_worker_module>
    ServerLimit              25
    StartServers             10
    MinSpareThreads          75
    MaxSpareThreads         250 
    ThreadLimit              64
    ThreadsPerChild          32
    MaxClients              800
    MaxRequestsPerChild   10000
</IfModule>


Short explanation of the parameters:

ServerLimitDeclares the maximum number of running apache processes. If you change this value you have to restart the daemon.
StartServersThe number of processes to start initially when starting the apache daemon.
MinSpareThreads/MaxSpareThreadsThis regulates how many threads may stay idle without being killed. Apache regulates this on its own very well with default values.
ThreadsPerChildHow many threads can be created per process. Can be changed during a reload.
ThreadLimitThreadsPerChild can be configured as high as this value during runtime. If you change this value you have to restart the daemon.
MaxClientsThis declares how many concurrent connections we provide. Devided by ThreadsPerChild you get the suitable ServerLimit value. May be less than ServerLimit * ThreadsPerChild to reserve some resources that can be engaged during runtime with increasing MaxClients and reloading the configuration.
MaxRequestsPerChildDefines the number of Connections that a process can handle during its lifetime (keep-alives are counted once). After that it will be killed. This can be used to prevent possible apache memory leaks. If set to 0 the lifetime is infinite.


For further information on these parameters see http://httpd.apache.org/docs/2.2/mod/worker.html and http://httpd.apache.org/docs/2.2/mod/mpm_common.html.

--Steffen.templin 12:10, 23 May 2011 (UTC)