ver terminar servidor servicios saber procesos proceso los iniciar detener como comando linux apache apache2 debian apache-config

linux - terminar - ¿Cómo puedo evitar que se generen toneladas de procesos Apache cuando empiezo Apache y procedo a matar mi máquina?



terminar proceso en terminal linux (6)

¿Has cambiado tu archivo de configuración recientemente? Si es así, ¿confío en que mantenga la versión anterior para diferir?

De lo contrario, busque las directivas "StartServers", "MaxSpareServers" y "MinSpareServers". En general, debe dejar esto en los valores predeterminados, pero es posible que se hayan configurado intencionalmente alto (mala idea) o configurado accidentalmente de esa manera debido a una mala configuración de edición.

Si esto no ayuda, es hora de mirar fuera de Apache, ya que hay un proceso que está abriendo conexiones a gran velocidad (podría ser que haya un proceso de prueba desbocado).

El primer paso es el registro de acceso. El segundo paso es ejecutar netstat, para ver de dónde pueden venir las conexiones. Y si se ejecuta en el mismo sistema, puede buscar en / proc / * / fd para encontrar los dos extremos de la conexión.

Tengo una aplicación con mucho tráfico en una máquina Debian y Apache ha comenzado a actuar de forma extraña.

Cada vez que inicio apache, se generan toneladas de procesos apache, la aplicación no se carga en absoluto, y muy rápidamente toda la máquina se congela y debe reiniciarse para reiniciar.

Esto es lo que obtengo para la parte superior inmediatamente después de comenzar apache:

top - 20:14:44 up 1:16, 2 users, load average: 0.48, 0.10, 0.03 Tasks: 330 total, 5 running, 325 sleeping, 0 stopped, 0 zombie Cpu(s): 12.0%us, 21.4%sy, 0.0%ni, 65.7%id, 0.2%wa, 0.1%hi, 0.7%si, 0.0%st Mem: 8179920k total, 404984k used, 7774936k free, 60716k buffers Swap: 2097136k total, 0k used, 2097136k free, 43424k cached 10251 www-data 15 0 467m 8100 4016 S 6 0.1 0:00.04 apache2 10262 www-data 15 0 467m 8092 4012 S 6 0.1 0:00.05 apache2 10360 www-data 15 0 468m 8296 4016 S 6 0.1 0:00.05 apache2 10428 www-data 15 0 468m 8272 3992 S 6 0.1 0:00.05 apache2 10241 www-data 15 0 467m 8256 4012 S 4 0.1 0:00.03 apache2 10259 www-data 15 0 467m 8092 4012 S 4 0.1 0:00.04 apache2 10274 www-data 15 0 467m 8056 4012 S 4 0.1 0:00.03 apache2 10291 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.03 apache2 10293 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.03 apache2 10308 www-data 15 0 468m 8296 4016 S 4 0.1 0:00.02 apache2 10317 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.02 apache2 10320 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.04 apache2 10325 www-data 15 0 468m 8292 4012 S 4 0.1 0:00.04 apache2

Y así sucesivamente ... con más procesos apache2.

Menos de un minuto después, puede ver a continuación que la carga ha pasado de 0,48 a 2,17. Si no paro el apache en este punto, la carga continúa aumentando durante unos minutos o menos hasta que la máquina muera.

top - 20:15:34 up 1:17, 2 users, load average: 2.17, 0.62, 0.21 Tasks: 1850 total, 5 running, 1845 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 2.1%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.1%hi, 1.0%si, 0.0%st Mem: 8179920k total, 1938524k used, 6241396k free, 60860k buffers Swap: 2097136k total, 0k used, 2097136k free, 44196k cached

Contamos con un firewall en el que incluimos en la lista blanca las direcciones que sabemos que pueden visitar nuestro sitio.

Cualquier idea sobre cuál podría ser el problema es muy bienvenida.

¡Gracias!


Como se ha dicho (asumiendo Prefork Apache) - MaxClients = max procesos a la vez.

Si observa que está recibiendo mucho tráfico (y no un StartServers / Min / MaxSpareServers mal configurado), hay otras cosas que puede hacer:

  1. Configure un proceso de apache ligero y separado (o lighttpd) para su contenido estático. De esta forma, todas las cosas pequeñas y estáticas no "contaminan" su proceso de aplicación de gran peso. Esto puede estar en el mismo servidor o en uno diferente. No importa
  2. Pon un proxy inverso como Squid delante de tu proceso Apache. El proxy inverso absorberá rápidamente el contenido de Apache y lo almacenará en la memoria y luego lo restituirá al cliente. De esta forma, los usuarios de AOL en los módems de 14.4kb no acaparan una de tus valiosas máquinas tragamonedas Apache. Como beneficio adicional, dicha configuración se puede configurar para almacenar en caché parte de su contenido para reducir la carga en sus procesos Apache.

Esta pregunta es antigua, pero me siento obligado a añadir una respuesta aquí porque todas las respuestas existentes están pasando por alto una información clave del PO: después de que la carga ha comenzado a subir durante unos minutos, la top informa que todavía hay suficientes Recursos de CPU y memoria disponibles. Por lo general, queda un culpable, y eso es E / S.

Verifica si hay una partición completa con df -h . De lo contrario, compruebe si su aplicación agita el disco utilizando vmstat 1 10 o iostat 1 10 (estos son proporcionados por el paquete ''sysstat'' en Debian / Ubuntu). Si aún no ve un problema allí, tal vez tenga errores de E / S a nivel de dispositivo o problemas de red para el almacenamiento montado en la red. Verifique los archivos de registro del sistema y del daemon.


Probablemente haya cometido el error de configurar Apache para usar mucho más que todo su RAM. Este es un error fácil de hacer.

Supongo que está utilizando un Apache Prefork y un servidor de aplicaciones en proceso (como PHP o mod_perl). En este modelo, terminará con un máximo de (MaxClients * máximo uso de memoria de su aplicación por proceso) memoria utilizada. Si no tiene casi tanto, es hora de disminuir uno, el otro o ambos.

En el caso general, esto significa disminuir MaxClients hasta el punto donde su servidor tiene suficiente memoria RAM para hacer frente.

Los valores predeterminados normalmente utilizados para MaxClients (150 es típico) no son adecuados para ejecutar un servidor de aplicaciones pesadas en proceso en una máquina modesta si está utilizando el modelo Prefork (la mayoría de los servidores de aplicaciones no admiten o desalientan el uso de modelos roscados).

Sin embargo, la disminución de MaxClients eventualmente hará que la aplicación deje de estar disponible, particularmente si tiene keepalives activados y el tiempo de espera de keepalive es demasiado largo. Los procesos que solo mantienen una conexión activa (estado K en estado de servidor) todavía usan mucha RAM, y eso puede ser un problema: intente minimizar el tiempo de espera de keepalive o desactívelo por completo.

Debe vigilar el estado del servidor (como lo proporciona mod_status).

Por supuesto, solo debe hacer CUALQUIERA de estos cambios si comprende las consecuencias. Piense dos veces, cambie la configuración una vez. Si tiene CUALQUIER capacidad para probar los cambios con carga simulada en una máquina no productiva de especificaciones similares, hágalo.


Su salida ''superior'' muestra que tiene mucha memoria libre, por lo que no creo que MaxClients sea un problema (a menos que haya algún problema con Apache asignando más de 2GB de memoria). Su registro de errores debería mostrar errores si es tener problemas para crear más niños.

Lo más probable es que sus procesos Apache realmente estén usando muchos recursos. Si está ejecutando aplicaciones PHP, intente instalar eAccelerator que hace un buen trabajo optimizando y almacenando en caché el código PHP. Otras cosas pueden incluir consultas pesadas de MySQL, una resolución lenta de DNS, etc. Más allá de eso, se trata más de comprender qué programas están siendo afectados y qué están haciendo.


usar ps -aux | grep apache para averiguar la cantidad de procesos en los que Apache se está ejecutando. Busque la columna "RSS" que proporciona una estimación de la memoria utilizada por cada proceso. También puede usar "arriba", donde cambia + f y luego selecciona la columna% MEM para ordenar los procesos por uso de memoria.

La cantidad de procesos está determinada por la directiva "MaxClients" en su archivo apache.conf. La forma en que llegas a esta figura es como se describe en esta página ;

  1. SSH en su servidor como raíz.
  2. Ejecutar arriba.
  3. Presione shift + m.
  4. Tenga en cuenta la memoria RES más alta utilizada por httpd.
  5. Presione Q para salir de arriba.
  6. Ejecutar: service httpd stop (En debian, sudo service apache2 stop )
  7. Una vez que se detiene httpd, ejecuta: free -m
  8. Tenga en cuenta la memoria enumerada en "usado".
  9. Encuentra la memoria garantizada para tu plan VPS. El soporte puede decirle cuánto tiene garantizado si no puede encontrarlo.
  10. Reste la memoria UTILIZADA de la memoria que su plan está GARANTIZADO. Esto le dará su base GRATIS PISCINA DE MEMORIA.
  11. Multiplique el valor de su PISCINA DE MEMORIA GRATIS por 0.8 para encontrar su APACHE POOL DISPONIBLE promedio (esto le permitirá una reserva de memoria del 20% para los períodos de ráfaga).
  12. Divida su PISCINA APACHE DISPONIBLE por la memoria RES más alta utilizada por httpd. Esto le dará el valor de MaxClients que se debe establecer para su sistema. (Redondea al entero más cercano menos de este valor si tiene un componente de fracción).

El valor correcto para "MaxClients" asegurará la asignación correcta de memoria para su servidor apache. Así es como lo resolví.

En Debian, el archivo de configuración de apache está en /etc/apache2/apache2.conf