trafico - optimizar apache+php
¿Cómo se aumenta la cantidad máxima de conexiones simultáneas en Apache? (2)
Aquí hay una explicación detallada sobre el cálculo de MaxClients y MaxRequestsPerChild
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 se determinarán mediante el parámetro StartServers
. Luego, cada proceso iniciará 25 subprocesos determinados por el parámetro ThreadsPerChild
, lo que significa que 2 process puede atender solo a 50 conexiones / clientes concurrentes, es decir, 25x2 = 50. Ahora, si llegan más usuarios simultáneos, se iniciará otro proceso secundario que puede dar servicio a otros 25 usuarios. Pero el número de procesos secundarios que se pueden iniciar está controlado por el parámetro ServerLimit
, esto significa que en la configuración anterior, puedo tener 16 procesos hijos en total, con cada proceso hijo puede manejar 25 hilos, en total manejo 16x25 = 400 usuarios simultáneos. Pero si el número definido en MaxClients
es menor, que es 200 aquí, entonces esto significa que después de 8 procesos secundarios, no se iniciará ningún proceso adicional ya que hemos definido un límite superior de MaxClients
. Esto también significa que si configuro MaxClients
en 1000, después de 16 procesos secundarios y 400 conexiones, no se iniciará ningún proceso adicional y no podremos dar servicio a más de 400 clientes concurrentes, incluso si aumentamos el parámetro MaxClient
. En este caso, también necesitamos aumentar ServerLimit
a 1000/25, es decir, MaxClients/ThreadsPerChild=40
Esta es la configuración optimizada para el servidor de 1000 clientes.
<IfModule mpm_worker_module>
ServerLimit 40
StartServers 2
MaxClients 1000
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
¿Qué configuración de httpd conf debo modificar para aumentar el número máximo de conexiones simultáneas para Apache? NOTA: apagué KeepAlive ya que este es principalmente un servidor de 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>
cambiar la directiva MaxClients. ahora está en 256.