¿Cómo se aumenta el número máximo de conexiones simultáneas en Apache?

102

¿Qué configuración de httpd conf necesito cambiar para aumentar el número máximo de conexiones simultáneas para Apache? NOTA: Apagué KeepAlive ya que este es principalmente un servidor API.

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
## 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
JonnyJon
fuente

Respuestas:

170

Aquí hay una explicación detallada sobre el cálculo de MaxClients y MaxRequestsPerChild

http://web.archive.org/web/20160415001028/http://www.genericarticles.com/mediawiki/index.php?title=How_to_optimize_apache_web_server_for_maximum_concurrent_connections_or_increase_max_clients_in_apache

ServerLimit 16
StartServers 2
MaxClients 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

En primer lugar, cada vez que se inicia un apache, iniciará 2 procesos secundarios que están determinados por StartServersparámetro. Luego, cada proceso iniciará 25 subprocesos determinados por ThreadsPerChildparámetro, por lo que esto significa que 2 procesos solo pueden dar servicio a 50 conexiones / clientes simultáneos, es decir, 25x2 = 50. Ahora, si llegan más usuarios concurrentes, se iniciará otro proceso hijo, que puede dar servicio a otros 25 usuarios. Pero la cantidad de procesos secundarios que se pueden iniciar está controlada por ServerLimitparámetro, esto significa que en la configuración anterior, puedo tener 16 procesos secundarios en total, con cada proceso secundario puede manejar 25 subprocesos, en total manejo 16x25 = 400 usuarios concurrentes. Pero si el número definido en MaxClientses menor, que es 200 aquí, esto significa que después de 8 procesos secundarios, no se iniciará ningún proceso adicional ya que hemos definido un límite superior deMaxClients. Esto también significa que si lo configuro MaxClientsen 1000, después de 16 procesos secundarios y 400 conexiones, no se iniciará ningún proceso adicional y no podremos atender a más de 400 clientes simultáneos incluso si hemos aumentado el MaxClientparámetro. En este caso, también debemos aumentar ServerLimita 1000/25, es decir, MaxClients/ThreadsPerChild=40 esta es la configuración optimizada para el servidor 1000 clientes.

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Raisul
fuente
24
Parece haber algunos cambios después de la versión 2.3.13. Por ejemplo, MaxClients ahora es MaxRequestWorkers.
ılǝ
2
Por favor avise: el sitio vinculado actualmente está sirviendo malware (y pornografía) ... Probablemente esté pirateado ... Bastante molesto si está en el trabajo buscando una solución en stackoverflow y se abre un sitio porno completo ... sitecheck.sucuri. net / results / www.genericarticles.com
yoano
1
Bien, pero ¿cuál es la memoria requerida y los requisitos de CPU para esta configuración óptima? O, ¿cómo puedo tener en cuenta la CPU y la memoria también para estas optimizaciones?
indianwebdevil
Apliqué esta configuración y aún se alcanzan las conexiones actuales ... parece un límite duro en otro lugar
Jorge Cornejo Bellido