Para uno de los proyectos en el que llevo trabajando algunos meses nos pidieron que efectuaramos pruebas de carga de los servidores del proyecto para ver hasta dónde podríamos llegar y cómo reaccionaban dichos servidores ante la carga.
El primer problema fué encontrar la forma de simular peticiones sobre los servidores web de forma que estas simularan la actividad de los usuarios reales. Esto era un tanto difícil por la forma en que se autenticaban los usuarios y que la mayor parte del contenido se accedía una vez autenticado. Aquí encontramos dos posibles soluciones:
– Scripting con curl: Utilizando bash script y el curl realizábamos una auténticación en el sistema que quedaba almacenada en una cookie que se utilizaba posteriormente cómo credencial de acceso en las peticiones siguientes. La verdad es que curl es una herramienta que me encanta y que nos permite hacer cosas realmente ingeniosas cuando se trata de automatizar algunos procesos web y os la recomiendo encarecidamente. Además se desarrolló otro script para parsear los resultados de curl de forma que pudieramos obtener estadísticas de tiempos de acceso por número de usuario y por página visitada. Un saludote a @jorgecab que se curró la mayor parte de los scripts.
– Jakarta JMeter: Es una herramienta java bastante potente que nos permite definir escenarios muy variados de pruebas de carga y analizar los resultados. Una de las cosas que más me gustó es su herramienta de proxy web que te permite levantar un proxy contra el que enchufas tu navegador y simulas la navegación que quieres que luego se repita durante las pruebas de carga. Muy potente y bastante flexible, y por supuesto Open Source.
Una vez que disponíamos de nuestro generador de stress y antes de lanzarlo contra los servidores hay que asegurarse de tomar bien «la temperatura» a los servidores, es decir capturar el máximo de datos de su estado durante el periodo de las pruebas. Para ello utilizamos el paquete sysstat que nos permite medir con precisión una gran cantidad de elementos significativos dentro de nuestro servidor. Para ello utilizamos dos herramientas:
– Sar: Que nos permite muestrear una gran cantidad de información de nuestro equipo cómo por ejemplo: uso de las distintas CPUs, carga del sistema, uso de memoria, entrada/salida, red, etc… Para ello definimos los parámetros que queremos monitorizar, el periodo entre cada muestra y el número de muestras que vamos a tomar.
– Pidstat: De toda la información que obteníamos con sar sólo echaba en falta el poder comprobar el estado de los procesos y cuales eran los que estaban cargando la máquina. Después de buscar un rato descubrí que a partir de la versión 8 de systat se incluye la utilidad pidstat que nos permite tomar muestras parecidas a las de sar pero por procesos indicando los pids de los procesos a monitorizar o trabajando con todos ellos. Así podemos comprobar la subida y bajada del uso de memoria y de CPU de los procesos más significativos.
A la hora de estudiar el comportamiento del sistema y de generar el informe sobre las pruebas nos encontramos con otra herramienta muy interesante: kSar que nos permite sacar de forma sencilla gráficas a partir de los datos obtenidos mediante sar. También tenemos la opción de exportar directamente la salida de sar o pidstat a un fichero csv y importarlo en nuestro openoffice calc para crear gráficas.