GNU/Linux >> Tutoriales Linux >  >> Linux

MPM Prefork, ¿demasiados procesos apache2?

Solución 1:

Le di la respuesta a esto en los comentarios sobre El servidor no responde a SSH y HTTP, pero el ping funciona, pero aparentemente no me cree. ¡De verdad, es verdad!

Necesitas talla MaxClients / ServerLimit a su sistema. Las "configuraciones de 5 a 10 para servidores mín./máx." que mencionas son básicamente irrelevantes; esa es solo la cantidad de extra servidores dando vueltas sin hacer nada que Apache retenga.

Para configurar MaxClients de manera adecuada, mire la marca típica de agua alta para su httpd (o apache2 ) procesa, y luego divida su memoria disponible por eso. Lo mejor es descender un poco para dar al resto del sistema espacio para respirar. Dado que tiene 4 GB de RAM y 185 MB de procesos, eso significa que su ServerLimit el valor debe ser 21 como máximo, probablemente 20 o 19.

Ahora, puede ser que 190 MB sea atípico. Puede configurar ServerLimit más alto, en función de una estimación diferente del uso típico, pero básicamente está apostando a que nunca tendrá un pico. Si sucede, su sistema se quedará sin memoria.

Si puede encontrar una manera de limitar el uso de memoria por trabajador, será una victoria. Apuesto a que este es un caso de PHP Ate My RAM. ¿Puedes codificar tu aplicación para vivir dentro de un memory_limit inferior? ? Si no puede hacer eso, necesita un modelo diferente bajo el cual ejecutar su PHP. Si no puede hacer eso, necesita comprar más RAM.

Solución 2:

Los servidores MPM prefork de Apache se autogestionan. Siempre comenzará con StartServers demonios, y nunca ejecutará menos de MinSpareServers una vez que se pone en marcha. Eventualmente también retirará/eliminará los servidores que superen los MaxSpareServers si están inactivos el tiempo suficiente (no recuerdo qué es "Lo suficientemente largo" en este contexto, ni si/cómo se puede modificar).

ServerLimit establece el número máximo de demonios apache que pueden estar ejecutándose en un momento dado. Esta es la razón por la que en su situación puede tener cientos de procesos apache inactivos (se generaron para atender una avalancha de solicitudes y no han estado inactivos el tiempo suficiente para ser asesinado por el proceso madre todavía).

Personalmente, creo que 1250 es un valor bastante alto para ServerLimit /MaxClients -- 250 puede ser un número más razonable (aunque esto puede resultar en el error ocasional 503/Servidor ocupado si recibe una avalancha masiva de solicitudes:si eso se convierte en un problema crónico, puede aumentar el número o agregar más servidores para manejar la carga ).

Relacionando esta pregunta con la anterior Re:un bloqueo por falta de memoria, definitivamente siga las instrucciones del Manual de Apache sobre este parámetro:

Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.

…y mi axioma personal:It's better to give a client a 503 page than knock the server down . :)

Solución 3:

Apague Keepalives y establezca MaxClients en 150. La razón más probable por la que tiene 260 procesos sentados allí es porque Apache mantiene abiertas las conexiones del navegador porque KeepAlive está activado en su archivo de configuración de Apache.


Linux
  1. ¿Instalar Apache 2.2.22 en Ubuntu 14.04?

  2. Cómo configurar Apache con MPM Event y PHP-FPM en Ubuntu 20.04

  3. ¿Por qué git falla al empujar/buscar con demasiados archivos abiertos?

  4. ¿Cómo puedo determinar si Apache está instalado en un sistema?

  5. s3cmd falla demasiadas veces

Comandos de Apache que debe conocer

Solución de problemas:demasiados redireccionamientos

Cómo instalar el servidor web Apache en Ubuntu 20.04

Error de demasiadas conexiones en MySQL

Cómo sortear el límite de demasiados argumentos de Linux

Demasiados archivos abiertos en Debian