Apache utiliza 100% de CPU. ¿Puede el comando "ps" decirme qué está haciendo?

8

Tengo un servidor Linux SLES 10, y algunas veces Apache lo maximiza al 100% de la CPU.

Con ps axpuedo ver, que Apache ha generado ~ 50 procesos de Apache.

¿Puede, por ejemplo, el pscomando decirme qué está haciendo cada uno de estos procesos de Apache?

¿O quizás algún otro método para ver qué páginas web desencadenan el problema?

Sandra
fuente

Respuestas:

14

Mi archivo /etc/httpd/conf/httpd.conf tiene esta sección:

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
    Allow from 127. 192.168.1.
</Location>

Por lo tanto, si voy a http://192.168.1.1/server-status , obtengo una página que me dice:

  1. versión del servidor
  2. tiempo de actividad httpd
  3. uso actual de la CPU
  4. de solicitudes en proceso y # de trabajadores inactivos

  5. una cuadrícula de lo que está haciendo cada proceso
  6. solicitudes recientes

    Estado del servidor Apache para 192.168.3.1

    Versión del servidor: Apache / 2.2.3 (Red Hat)
    Servidor creado: 14 de julio de 2009 06:04:04

    Hora actual: sábado 17 de julio de 2010 10:20:31 CDT
    Hora de reinicio: sábado 17 de julio de 2010 10:13:12 CDT
    Generación del servidor principal: 0 Tiempo de
    actividad del servidor: 7 minutos 19 segundos
    Accesos totales: 51 - Total Tráfico: 156 kB
    Uso de CPU: u0 s0 cu0 cs0
    .116 solicitudes / seg - 363 B / segundo - 3132 B / solicitud
    1 solicitudes actualmente en proceso, 7 trabajadores inactivos

    __W _____................................................. .......
    ........................................... .....................
    ............................. ...................................
    ............... .................................................

    Clave del marcador:
    "_" Esperando conexión, "S" Iniciando, "R" Solicitud de lectura,
    "W" Enviando respuesta, "K" Keepalive (lectura), "D" Búsqueda de DNS,
    "C" Cerrando conexión, "L "Inicio de sesión", G "Finalizando con gracia,
    " I "Limpieza ociosa del trabajador". Ranura abierta sin proceso actual

    Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
    0-0 20715 0/2/2 _ 0.00 418 0 0.0 0.01 0.01 192.168.3.97 dit GET / server-status HTTP / 1.1
    1-0 20716 0/49/49 _ 0.00 128 0 0.0 0.15 0.15 192.168.3.97 dit GET / estado del servidor HTTP / 1.1
    2-0 20717 0/0/0 W 0.00 0 520222374 0.0 0.00 0.00 192.168.3.97 dit GET / estado del servidor HTTP / 1.1

Kevin M
fuente
Es posible que deba configurar ExtendedStatus ONpara ver cada solicitud
TonyUser
3

stracepuede decirle qué está haciendo un proceso específico a nivel de llamadas del sistema, pero no le dará una "vista de 50 pies" de lo que está sucediendo. Tendrá que reconstruir las llamadas del sistema que está utilizando para resolverlo.

Ignacio Vazquez-Abrams
fuente
2

Si tiene un sitio web con una base de datos, puede buscar en el DBMS qué comandos se están ejecutando actualmente. Tal vez esto podría ayudarlo a reducir dónde se genera la carga en su código del sitio web.

De lo contrario, podría aumentar el nivel de registro del demonio httpd. Entonces tienes más información en los registros.

Raffael Luthiger
fuente
1

También hay ltrace, que funciona como strace pero con llamadas a la biblioteca.


fuente
0

Puede encontrar top más informativo que ps.

bmargulies
fuente