Optimización de prefork de Apache: elección del valor correcto `MaxRequestsPerChild`

9

Estoy tratando de optimizar nuestros servidores web para manejar tantas conexiones como sea posible. Leí muchas publicaciones y las notas de Apache. Estoy tratando de entender qué valor debo elegir MaxRequestsPerChild.

Al principio, intenté configurarlo en 4.000, pero el servidor tuvo dificultades para manejar muchas solicitudes, así que comencé a aumentarlo. Por el momento mi configuración son:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

Después de configurar MaxRequestsPerChild40,000, el servidor logró manejar más conexiones sin usar más memoria / CPU.

¿Alguien puede decirme si este valor es demasiado alto o está bien tener un valor tan alto?

¡Gracias!

Información del sistema operativo:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104
Kuf
fuente

Respuestas:

10

MaxRequestsPerChilden realidad solo es útil para limitar la cantidad de pérdida de memoria con el tiempo cuando se ejecutan scripts dinámicos. Si solo está sirviendo contenido estático o scripts muy pequeños / simples, entonces probablemente pueda establecerlo en 0 o muy alto sin mucho efecto. Si está ejecutando scripts más grandes / complejos, establecerlo en 0 / alto dará como resultado que sus procesos de Apache consuman cada vez más memoria. Exactamente cuánto más depende de su aplicación específica.

Por otro lado, establecerlo muy bajo en realidad puede resultar en un poco más de uso de la CPU ya que los procesos de Apache se reinician constantemente.

Haría una prueba simple para ver cuánta memoria pueden usar sus procesos. Establezca MaxRequestsPerChilden 0 y reinicie Apache. Pruebe cargar algunas páginas y vea cuál es el tamaño inicial de los procesos de Apache top. Vuelva a verificar después de algunas horas / días / semanas (dependiendo de su aplicación y de las visitas a su página) y vea cómo crece. Si no crece mucho, entonces un valor 0 o muy grande para MaxRequestsPerChilddebería estar bien.

Si tiene un tamaño máximo establecido para sus procesos de Apache (es decir, desea que sean de 50 MB o menos), puede hacer la misma prueba con varios valores MaxRequestsPerChildhasta que encuentre un valor que mantenga a Apache por debajo de eso.

uesp
fuente
1
¿Cómo puedo probar cargar las páginas y ver el tamaño de los procesos de Apache con Windows Server?
Ahmad Alfy