Buscador

Loading

viernes, 25 de mayo de 2012

Servidores con carga alta, como solucionarlo

Como se lee la carga?

un modo es con el comando

# w

y comúnmente es expresada  así.


load average: 0,39, 0,43, 0,35

Esto es  es la carga promedio a 1, 5 y 15 minutos.

en palabras simples ¿Que significa la Carga?

Significa que en promedio N cantidad de procesos estuvieron ejecutándose a la vez.

Eso no significa que si tengo activo apache, mysql y sendmail a la vez tendré una carga de 3; aunque los 3 servicios se encuentran activos no significa que ande gastando recursos en procesar información.


Ahora en un escenario real,  apache, mysql, sendmail se ejecutan cientos de veces durante un segundo, consumiendo siempre recursos distintos; en ocasiones estarán los 3 a la vez, en otras 2 a a la vez, etc.   Esto nos da como resultado una carga de 1.4 (valor inventado para el ejemplo); Este valor quiere decir que en promedio se estaban ejecutando 1.4 programas a la vez.

en vida  real:

top - 14:35:04 up 15 days, 22:10,  1 user,  load average: 1.13, 1.16, 1.26
Tasks: 206 total,   2 running, 202 sleeping,   1 stopped,   1 zombie
Cpu(s):  3.5%us,  2.3%sy,  0.0%ni, 89.7%id,  4.2%wa,  0.0%hi,  0.2%si,  0.0%st


Como verán están 206 tareas ejecutándose, pero no todas a la vez;  en 1 segundo posiblemente atendió a 500 enlaces web y 200 correos, pero en cada uno solo tardo milisegundos.

¿Cual es la carga ideal?  es menor a 1;  ya que en promedio solo se ejecuta un proceso a la vez obteniendo el 100% de los recursos del hardware.

¿Porque tengo problemas de carga?

1- Un proceso esta lento ocupando recursos del hardware por mucho tiempo.
2- Existen demasiados procesos y todos desean ser atendidos.
3- El hardware esta lento = El hardware llego a su limite de capacidad

Primero detectemos que proceso es el que causa el problema, un modo sencillo es ejecutar en una ventana de terminal a top para estar monitoreando la carga y en otra terminal trabajando, lo que aremos es detener un servicio y contar hasta 10, si la carga bajo significativamente ahí esta nuestro problema; si no bajo  iniciemos otra vez el servicio y vallamos al siguiente servicio.

Muy bien, ya detectamos el servicio afectado.  ahora analicemos... 

Si el iowait esta mayor a 10% de modo constante tenemos un problema hacia el hardware, casi siempre el disco duro  y para solucionarlo existen las siguientes opciones:

1- Existen muchas solicitudes a ese servicio, por lo tanto ese servicio hace mucho trabajo en disco duro almecenando o consultando lo necesario,  aqui algunos ejemplos de solucion

a ) apache : mod_qos (balancea y protege DDOS) + APC (cache para php) + revisar que tengamos suficiente ram.
b) mysql: revisar que tengamos bien optimizado el cache
c) sendmail (qmail, exim, etc)  si es por correo saliente entonces ver la posibilidad de tener un smtp secundario en otro equipo  aquí un ejemplo ;  si el problema es que recibes mucho corro entrante y el disco duro anda ocupado almacenandolo  lo ideal es colocar un antispam, pronto platicare sobre el ASSP.

2- Si lo anterior no dio resultado provemos si hay demaciados procesos a al vez,  tal vez alguien nos ataca,  o tenemos una pagina mal programada, o malas consultas a la base de datos

3- Y lo ultimo, ir por un mejor hardware aunque el procesador es algo importante, es mucho mas importante ver el almacenamiento ya que es nuestro punto más lento. Si es posible divide la carga de trabajo en distintos discos duros (web, correo, BD, etc) y notaras un gran incremento de velocidad,  y lo ideal pero muchas veces fuera de presupuesto: 1 servidor por actividad


Seguimos en contacto.... gracias por leer y compartir experiencias









  







No hay comentarios:

Publicar un comentario

Generar número aleatorio en java script con rango de valores

Número aleatorio en java script con rango de valores Les comparto esta funcion para  generar un número aleatorio en javascript, y este num...