6 minute read
del sistema
Figura 43.
En esta información que nos proporciona mod_status, podemos observar lo que Apache denomina el tablero (scoreboard) donde se representan todos los slots o procesadores de peticiones y el estado de éstos. De la información que tenemos en pantalla podemos deducir que muchos de estos slots están ocupados enviando información (los marcados con W). Esto, en principio, indica que nuestro servidor está respondiendo bien a las peticiones recibidas. Cabe indicar aquí que esta prueba se ha realizado enviando un total de cien peticiones simultáneas al servidor hasta completar 100.000 peticiones, siendo la máquina cliente de estas peticiones el propio servidor. Vemos también en la información mostrada que el servidor aún dispone de algunos slots libres. Esto nos indicaría que todavía estamos en disposición de recibir más peticiones (no nos indica que seamos capaces de atenderlas con la velocidad deseada).
Advertisement
9.3.2. Obtener información de rendimiento del sistema
Otra fuente de información sobre cómo se está comportando nuestro servidor es el sistema operativo. Por norma general, los sistemas operativos suelen incluir una serie de herramientas muy variadas que nos permiten saber en todo momento el estado de éste. Dichas herramientas nos permitirán conocer el nivel de uso de procesador, de memoria, etc.
Usaremos para todo el análisis la serie de herramientas que suelen estar disponibles de forma habitual en los sistemas Unix. En caso de
que nuestro sistema no disponga de dichas herramientas, muchas de ellas están disponibles libremente en Internet. También existen herramientas similares para la mayoría de sistemas operativos.
Carga de procesador
Mediante este término nos referimos al nivel de ocupación de las unidades centrales de proceso, CPU, del sistema servidor. El funcionamiento normal de los servidores web, como Apache, requiere de un cierto nivel de uso de procesador, nivel que se ve incrementado por el uso de páginas generadas dinámicamente, etc.
Si, como ocurre en algunos casos, el sistema del servidor web proporciona más servicios que los del web (el servidor de correo, por ejemplo) deberemos ser muy cuidadosos con el nivel de procesador utilizado.
Podemos disponer de una primera aproximación al uso de nuestro sistema con el comando: vmstat.
En este ejemplo, observamos la distribución de carga de CPU. Son los tres valores situados a la derecha, etiquetados con us, sy e i d, que corresponden a: user, system y idle (respectivamente, usuario, sistema y desocupada). Estos valores nos marcan qué porcentaje del tiempo permanece el procesador en cada uno de estos estados:
• user: el procesador permanece en espacio de usuario mientras ejecuta programas.
• system: el procesador permanece en este estado mientras ejecuta código que forma parte del núcleo del sistema operativo, o atiende a llamadas al sistema, como pueden ser controladores de comunicaciones, etc.
[carlesm@bofh carlesm]$ vmstat 2
mprocs memory swap io system cpu r b w swpd free buff cache si so bi bo in c s us sy id 1 0 0 26364 46412 178360 206072 0 0 4 13 29 4 1 7 0 46
0 0 0 26364 46412 178360 206072 0 0 0 0 107 2 2 0 0 100
0 0 0 26364 46412 178360 206072 0 0 0 0 108 2 2 0 0 100
• idle: es el tiempo que el procesador permanece libre, no ocupado.
Un valor alto continuado de us indicaría un uso intenso de procesador. En ese caso, la máquina se encuentra cerca de su límite de respuesta y deberemos estudiar soluciones para evitar que un aumento de carga implique una pérdida de capacidad de respuesta. Dichas soluciones deben orientarse a conseguir un menor consumo de procesador (reescritura de código, optimización de éste) o una ampliación de la capacidad de proceso.
Un valor alto de sy indica que el sistema permanece mucho tiempo ocupado con tareas del propio núcleo del sistema. Debemos intentar averiguar las causas (controladores incorrectos o defectuosos, hardware no apropiado, etc.) y solucionarlas.
Un valor alto de id (si tenemos problemas de rendimiento) indicaría que el problema no se encuentra en el procesador, debiendo dirigir nuestras pesquisas hacia otros aspectos.
Otros valores importantes que nos muestra vmstat son las dos columnas anteriores:
• in (interrupts): el número de interrupciones que han ocurrido por segundo (incluyendo las correspondientes al reloj del sistema).
• Cs (context switches): el número de cambios de contexto (de proceso o hebra activa en el procesador) que han ocurrido por segundo.
Un valor excesivamente alto de cs suele indicar que el número de procesos del sistema es excesivo. Si dicho exceso viene provocado por los procesos que genera el servidor web, deberemos ajustar ese número a la baja. Otra posible causa derivaría de un nivel de comunicaciones inter-proceso (IPC) elevada y poco óptima que provocase cambios de contexto excesivos.
Las tres primeras columnas nos indican otros valores que conviene observar:
• r: número de procesos listos para ejecutar.
• b: número de procesos bloqueados.
• w: número de procesos pasados a memoria swap pero ejecutables.
En situaciones de carga, dichos indicadores de número de procesos nos pueden dar una idea del nivel de contención para entrar en el procesador que hay que ejecutar:
Podemos ver en el ejemplo, obtenido en un momento de carga elevada del servidor, que tenemos un elevado número de procesos disponibles para ejecutar y un nivel de desocupación de procesador 0. Como estos datos proceden de una máquina monoprocesadora y viendo, además, el número de cambios de contexto que se efectúan, podemos deducir que el número de procesos que está ejecutándose es excesivo.
Existen otras herramientas, top, p s, entre otras, que nos proporcionarán la misma información o información complementaria. Es realmente importante que conozcamos las herramientas de que dispongamos en nuestro sistema operativo, así como las capacidades de éstas.
23 0 1 27328 7944 169696 210932 0 0 0 480 1 1 6 13715 41 59 0
21 0 0 27336 7576 169624 211376 0 4 0 4 1 0 4 13724 43 57 0
17 0 1 27336 7096 169448 211924 0 0 0 474 1 1 3 13726 40 60 0
13 0 0 27344 6624 169444 212296 0 4 0 4 1 0 5 13753 38 62 0
Ocupación de memoria
El mismo comando, vmstat, nos muestra además algunos datos básicos sobre la ocupación de memoria. Disponemos de las siguientes columnas con información sobre ocupación de memoria:
Tenemos las columnas swpd, free, buff y cache que nos indican, respectivamente:
• swpd: la ocupación de la memoria swap en disco (memoria de intercambio).
• free : la cantidad de memoria física (RAM) libre.
• buff : la cantidad de memoria usada como buffers.
• cache: la cantidad de memoria usada como cache de disco.
Durante el tiempo en que nuestro servidor web esté bajo un nivel de carga elevado, debemos observar atentamente dichos valores. Un nivel muy alto de swpd y uno muy bajo de free , buff y cache indicaría que nuestro sistema no dispone de memoria suficiente y que debe recurrir a la memoria virtual en disco, mucho más lenta que la memoria RAM.
Otras dos columnas, si y so, nos indican la cantidad de memoria que se envía a la memoria virtual en disco o la que se recupera de allí en kB/s. Valores diferentes de cero y sostenidos en el tiempo indicarían que nuestro sistema está falto de memoria y, por lo tanto, debe descartar y recuperar de disco datos continuamente.
Acceso a disco
Uno de los puntos que suele descuidarse al dimensionar equipamiento para los servidores web es el del acceso a disco. Debemos tener en cuenta que un servidor web envía constantemente datos que lee del disco a los clientes remotos (las páginas, imágenes, etc.). Por eso, unos tiempos de acceso a disco pequeños y unas velocidades de transferencia elevadas posibilitarán que el servidor web tenga un alto nivel de rendimiento al servir páginas.
Para tener una idea de cómo están respondiendo nuestros discos a las peticiones, podemos usar, por un lado, el propio comando vmstat y, por el otro, un comando más especializado: iostat. El resultado de ejecutar iostat será:
avg-cpu: %user %nice
67.50 0.00
Device:
dev3-0 tps
32.00 %sys
18.50 %idle
14.00
Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn 208.00 844.00 416 1688