Limite el uso de memoria de Apache 2

9

Estoy ejecutando un servidor web hobby fuera de un antiguo Blue & White G3 / 300 con Debian PPC Squeeze 2.6.30. El rendimiento está bien durante un tiempo después de un reinicio, pero finalmente se empantana cada vez más. En este momento es a 76 días de tiempo de actividad, y el principal culpable parece ser el uso de memoria de más de 10 procesos apache2.

Creo que necesito para bajar los valores de StartServers, MinSpareServersy / o MaxSpareServers, pero no estoy seguro de cuál de ajustar, y hay tres secciones para cada función de que el módulo MPM está en uso.

¿Cómo puedo saber cuál de las siguientes secciones necesito cambiar y cuáles son algunos valores razonables dado que la caja tiene 448 MB de memoria física (un extraño historial de actualizaciones de una cada 64, 128 y 256 unidades)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

No hay otras instancias de StartServers en mi apache2.conf, pero ninguno de esos módulos mpm aparece en mods-availableo mods-enabled. Ideas?

¡Gracias!

UltraNurd
fuente
Asumí que su caja se está quedando sin memoria (y su pésimo rendimiento proviene del intercambio excesivo). Si no está intercambiando, lo
molestaré

Respuestas:

6

400 MB no es mucho para un servidor web en estos días, es posible que desee considerar reemplazar la caja :)

Dicho esto, si su uso de memoria se está disparando, probablemente tenga una pérdida de memoria en alguna parte: para una prueba rápida, observe el tamaño de los procesos httpd ahora, luego detenga / inicie Apache y vea si son mucho más pequeños. Si los están observando durante unos días y ver si crecen.

Si se trata de una pérdida de memoria, la solución real para eso es encontrar y corregir la pérdida de memoria, pero dado que eso suele ser un fastidio, también puede ajustarse MaxRequestsPerChilda algo distinto de 0 (ilimitado). Esto matará a los trabajadores de Apache cuando hayan atendido un número fijo de solicitudes (forzándolos a renunciar a su memoria perdida en el proceso.

Comience con valores más grandes (en miles más o menos) y avance hasta los cientos. Si obtiene menos de 100 solicitudes por niño, su pérdida de memoria es lo suficientemente grande como para justificar su reparación, ya que el rendimiento golpeará constantemente al matar y volver a generar trabajadores de apache será significativo.


Re: qué mpm ajustar, la respuesta es casi segura prefork.
Puedes correr httpd -Vy buscar la Server MPM:línea que te dirá con seguridad.

voretaq7
fuente
1
-V me dio la información previa que necesitaba (aunque es apache2 -V en mi caso). ¡Gracias!
UltraNurd
Parece haber hecho el truco. Creo que el problema era que me estaba quedando sin memoria física e intercambiando porque había demasiados servidores secundarios activos (cada uno de ellos con aproximadamente 80 MB). Y sí, lo sé, el servidor es viejo. Pero apenas está manejando ninguna solicitud: OD.
UltraNurd
1
Si no está manejando muchas solicitudes, también puede recortar los recuentos de servidores de Inicio y Repuesto como mencionó en su publicación original (en los sistemas de desarrollo los configuré a todos entre 2 y 5 para reducir el uso de RAM)
voretaq7
Terminé bajando los repuestos mínimos y máximos a 3 y 6 de 5 y 10, y eso parece dejar suficiente RAM restante para evitar que las cosas se intercambien. ¡Gracias!
UltraNurd
1

Para determinar el uso de memoria del proceso de apache, querrá ajustar los MaxClients.

La regla general es: (Memoria máxima deseada) / (Uso de memoria de 1 proceso Apache) = # Clientes máximos

Al final, también debe ajustar su para ser MaxSpareServers <= Max Clients .

El uso de la memoria de un proceso depende en gran medida de los módulos que haya cargado (php, etc.), por lo que es posible que desee configurar los Clientes máximos un poco más bajos.


fuente