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:
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
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
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
/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