Prueba de rendimiento (estrés) en Moodle – Jmeter

¡Hola a todos!

La llamada «Prueba de estrés» es una prueba de rendimiento que se utiliza normalmente para llegar al limite de la aplicación. Se multiplica el número de usuarios que se conectan a la aplicación y se ejecuta una prueba de carga hasta que se muestra lo que puede soportar (o se rompe…). Este tipo de prueba se realiza para determinar la solidez de dicha aplicación en los momentos de carga extrema y ayuda a los administradores para determinar si la aplicación rendirá lo suficiente en caso de que la carga real supere a la carga esperada.

JMeter es una aplicación utilizada como herramienta de prueba de carga, de tal manera analizar y medir el desempeño de una variedad de servicios, con énfasis en aplicaciones web. En éste caso, en Moodle, se pueden realizar pruebas de estrés mediante algunas opciones con las que ya cuenta.


Resumen

En Moodle vamos a crear un curso de prueba; a éste curso se deberá de matricular unos 1000 o más usuarios de prueba, dependiendo de la prueba que se desea realizar. Una vez teniendo esto, generamos el plan de prueba siempre en moodle, hacemos unos ajustes en el servidor y de configuración, y ejecutamos JMeter con dicho plan para hacerle estrés a Moodle. Mediante PHPMyadmin, verificaremos cómo afecta el rendimiento y así veremos que tanta concurrencia soporta nuestro hardware o nuestra configuración de Apache, MySQL, etc.


Procedimiento

Lo primero será pasar a Moodle al modo Debug; demás esta mencionar que con esto se debe tomar en cuenta que no se debería hacer en entornos de producción o, si se va a realizar, se debe de planificar bien, dado que el servicio será afectado.

Entramos a Moodle entonces y nos vamos a Administración del sitio → DesarrolloDepurando

Ya aquí debemos de activar el modo debug. Se muestra la opción como «DESARROLLADOR…»

Entramos a Moodle, y nos vamos a Administración del sitio → DesarrolloMake test course

Aquí vamos a seleccionar el tamaño del curso que queremos crear, se coloca un nombre corto del curso, un nombre completo del curso y un resumen…

Tomar en cuenta éste estimado:

  • L  → 1,000 usuarios
  • M → 100 usuarios
  • S → 30 usuarios
  • XL → 5,000 usuarios
  • XXL → 10,000 usuarios

Una vez ingresado los datos, se presiona el botón «Crear curso«.

Otra alternativa, para evitar usar ésta opción, es crear manualmente un curso con 1 recurso de Página Web, 1 Foro, un tema en el foro y una respuesta de dicho tema. Luego, se crean 1,000 (o los que se requieran) usuarios mediante un archivo CSV por ejemplo y se realiza el procedimiento de la subida masiva de usuarios mediante CSV; la contraseña de los usuarios debe de ser «moodle» (sin las comillas).

Si se realiza con la opción de Moodle, al finalizar, aparece algo así:

Una vez generado correctamente el curso de pruebas, vamos a agregar una línea de código en el archivo config.php del Moodle. Si es Ubuntu, puede que esté en /var/www/html/config.php

Entonces, en la terminal podemos ingresar así:

sudo nano /var/www/html/config.php

En el archivo config.php agregamos (después de $CFG->directorypermissions podría ser…):

$CFG->tool_generator_users_password = 'moodle';

Guardamos y también debemos de asegurarnos instalar el Java (JDK). Para instalarlo, lo podemos hacer así:

sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt install oracle-java8-installer

Ahora, dentro de Moodle, nos vamos Administración del sitio → DesarrolloMake JMeter test plan

Aquí, seleccionaremos el Tamaño del curso (Tomar en cuenta el tamaño elegido al crearlo…), el curso objetivo (Test target course, el cual se creó anteriormente…), y damos clic en «Create test plan«

Cuando finalice, nos mostrará 2 enlaces de descarga. Descargamos entonces los dos archivos:

  • testplan_xxx.jmx (configuracioń del plan de JMeter)
  • users_xxx.csv (Usuarios y claves)

Donde, xxx representa una fecha y un correlativo que le agrega Moodle.

A continuación, un ejemplo de los archivos:

Ahora, deberemos copiar dichos archivos al servidor. Esto lo podemos hacer mediante scp, filezilla, etc. (dependiendo de su entorno). Para nuestro ejemplo, se copiará vía SCP así:

sudo scp testplan_xxx.jmx users_xxx.csv usuario@11.22.33.44://tmp

En el ejemplo, se copiarán los 2 archivos en la carpeta /tmp del servidor con IP 11.22.33.44 con el usuario «usuario«.

Dentro del servidor (vía ssh por ejemplo), modificaremos el archivo testplan_xxx.jmx , por cuanto entramos con nuestro editor de texto favorito…

sudo nano /tmp/testplan_xxx.jmx

El archivo tiene un formato XML, por cuanto su estructura es bastante lógica y jerárquica. Para mejorar la búsqueda del parámetro que vamos a cambiar, usaremos la opción buscar y reemplazar que tiene nano.

  • Presionamos la combinación de teclas CTRL+W  luego CTRL+R
  • Ingresamos:
    • YOU_FORGOT_TO_SPECIFY_USERS_CSV_FILE.csv
  • Presionamos ENTER
  • Ingresamos el nombre del archivo CSV (users_xxx.csv)
  • Presionamos ENTER
  • Nos preguntará cómo queremos reemplazar, pues serían a Todas las coincidencias. Presionar la tecla T

Se tuvieron que cambiar las 2 referencias al archivo CSV. Cerramos y guardamos.

Instalaremos ahora el JMeter de la siguiente forma:

sudo apt install jmeter

De preferencia, nos vamos a la carpeta donde están el archivos csv y jmx (el cual esta en /tmp), pero si gustan, se puede colocar en otra carpeta de su gusto… recordar que, al reiniciar el server, los archivos dentro de /tmp se eliminan automáticamente. Para efectos de éste tutorial, trabajaré en /tmp

sudo cd /tmp

Ahora ejecutamos jmeter con el plan respectivo.

sudo jmeter -n -t testplan_xxx.xml -l log.log

Estará apareciendo cada cierto tiempo un resumen de los resultados obtenidos. Lo que buscamos es que que en el resumen los Errores sean igual a CERO (0)

Para solucionar problemas y ver su funcionamiento, podemos monitorear los archivos:

  • jmeter.log → Por defecto se crea en la misma carpeta donde se ejecutó el test. Se muestran los log de la prueba .

Ejemplo:

  • log.log  → Al final, muestra los accesos correctos a nuestro servidor web. Si esta vacío, habría que revisar la configuración del archivo testplan-xxx.xml

Ejemplo:

Es posible ejecutar la prueba en varias instancias, agregando al final de la línea de comando un &  … pero esto es a su discreción, dado que el server se estresará más.

Para monitorear, dado que hay muchas instalaciones de Moodle que utilizan como gestor de BD el MySQL y el Web GUI PHPMyAdmin para administrarlo, podemos aprovechar ésta última herramienta para ver de forma estadística el rendimiento del servidor. Obviamente, ustedes pueden monitorear de diferentes formas el hardware… puede ser con el comando top, free, los archivos /proc/* , etc.

Lo bonito de PHPMyAdmin es que nos muestra el estado de conexiones también, además de los procesos, CPU, memoria y ancho de banda. Para instalar PHPMyAdmin, basta con: sudo apt install phpmyadmin

Dentro de PHPMyAdmin, nos vamos a StatusMonitor

Y cuando se esta ejecutando la prueba de estrés, deberíamos de ver cómo va creciendo la carga.. Para salirse de la prueba del JMeter, podemos presionar la combinación de teclas CTRL+C

A continuación, un ejemplo con una carga «suave»:

Eso es todo amigos. ¡Saludos!

Comentarios por Facebook

comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*