Verificando la carga del servidor

Sitio Web lento, páginas que no terminan de cargar, errores de conexión a la base de datos, error HTTP 503, malos sintomas que indican que probablemente esté pasando algo en tu servidor.

Lo principal ante estos casos es "entrar" al servidor, vamos a suponer que tienes un servidor en Linux, con la consola abierta hacemos un "top"

webserver:~# top

El resultado del top es muy similar al de cualquier administrador de tareas de un sistema operativo moderno, pero el encabezado es el mas interesante en estos casos, lo primero que debemos mirar es la carga del servidor

top - 13:31:03 up 250 days, 21:58,  1 user,  load average: 0.26, 0.32, 0.39
 

Estos tres números nos indican que tan "cargado" está nuestro servidor. El load average es la cantidad de procesos que están encolados, calculados sobre un cierto período de tiempo.

El primer número (0.26) es en un minuto
El segundo número (0.32) en 5 min
Y el tercero (0.39) en 15 min.


Estos procesos en cola normalmente están esperando por un recurso (procesador, acceso a disco, acceso a memoria) si los numeros son muy altos (valores de más de 2.0 comienzan a ser precupantes) es que alguno de estos recursos está resultando insuficiente.

¿Qué más nos puede decir el top sobre esto?. Normalmente en un servidor Web el recurso que sufre es la memoria, asi que el próximo paso sería revisar el consumo de memoria como está, en el mismo encabezado del top podemos verificar estos valores
 
Mem:  16463836k total, 12195396k used,  4268440k free,  1075820k buffers
Swap: 14225548k total,    19916k used, 14205632k free,  6186616k cached


Aquí se puede apreciar la cantidad de memoria usada, de ella cuanta se está usando en caché y lo mas importante vemos cuanto swaping se está haciendo, el swaping normalmente se hace sobre el disco duro, siendo más lento que el acceso a la RAM, es más o menos de la siguiente forma:


  • Se llena la memoria RAM
  • Se comienza a hacer swaping
  • Los procesos tardan mas tiempo encolados
  • Llegan nuevos procesos, no hay RAM, swaping
  • Cada vez hay mas procesos encolados
  • La carga del servidor de dispara
Bueno, ante una urgencia quizás deberías parar tus procesos de servicios para evitar que el servidor colapse por completo

/etc/init.d/apache2 stop
/etc/init.d/mysql stop o /etc/init.d/postgresql-X.X stop 

Esto depende sel sistema operativo de nuestro servidor.

No obstante este es un buen momento para determinar que puede estar pasando, chequea en la lista de procesos quién está consumiendo más recursos.

Si tienes un servidor mysql trata de ver los procesos que están corriendo

mysqladmin processlist

O si tu base de datos es postgreSQL puedes hacer uso de la siguiente consulta desde la consola psql

SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
       pg_stat_get_backend_activity(s.backendid) AS current_query
    FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

Otro elemento que puedes chequear es cuantas conexiones hay abiertas al puerto 80 de tu apache (suponiendo que tu sitio se encuentra publicado por el puerto 80)

netstat -plan|grep :80 | awk {'print $5'} | rev | cut -d: -f 2 | rev | sort | uniq -c | sort -n

Con estas opciones puedes obtener cuantas conexiones hay de cada ip al puerto 80 de tu servidor, un exceso de conexiones desde un mismo ip es sospechoso, aunque pudiera tratarse de un proxy.

Revisa además las configuraciones de tu Apache y de tu sistema de bases de datos, pudieras estar aceptando más conexiones de las que realmente puede sorportar tu servidor.

No olvides levantar los servicios nuevamente (si los paraste)

Suerte

Comentarios

Entradas populares de este blog

Importar y exportar datos en Postgres y MySQL