Optimizando JMeter

jmeter-logo-g2khostingEn el diseño de un plan de pruebas de rendimiento, uno de los puntos a los que hay que prestarle gran atención es al diseño del sistema encargado de la generación del volumen de carga necesario. Antes de llegar a acciones más costosas y elaboradas como puede ser utilizar servicios en la nube, distribuir un grid de nodos, … podemos optimizar los recursos disponibles para obtener el máximo partido de ellos.

Una de las herramientas más utilizadas cuando trabajamos con pruebas de rendimiento es Apache JMeter. Código abierto, muy extendido entre los equipos de testing y respaldado por una gran comunidad. Los problemas más habituales comentados en los foros sobre el uso de esta herramienta suelen estar relacionados con el uso de memoria y CPU, los cuales se pueden reducir en gran parte siguiendo una serie de recomendaciones.

Es fácil ver que todos los recursos utilizados en el pre y post-procesado de las peticiones, reduce los recursos disponibles para las necesidades reales, por lo tanto, todo lo que puedas hacer antes/después, hazlo. Es más eficiente cargar un fichero de datos que tener que calcular estos durante la ejecución del plan. Otro punto a tener en cuenta son los listeners. Deshabilitalos todos, no los necesitas durante las pruebas de carga. Ya nos encargaremos de formatear los resultados una vez finalizado el test.

¿Qué más podemos mejorar?

Actualiza tu versión

Las tres últimas versiones de JMeter han mejorado notablemente la gestión de memoria y  CPU. En general, con el paso de una versión a otra se mantiene la compatibilidad, si no, con pequeños cambios podrás tener tu plan funcionando en la última versión disponible. Pero ojo, no te pases actualizandote y utilices una nightlybuild para unas pruebas delicadas, déjala para tus proyectos y pruebas personales  ;)

Trabaja con la línea de comandos

Una vez tienes el plan diseñado y funcionando  no necesitas la interfaz para nada. Usar JMeter desde la línea de comandos es muy sencillo y parametrizable.

<JMETER_HOME>/bin/jmeter -t tuTestPlan.jmx -n -l resultados.csv

Adapta la JVM según tus necesidades

Configurando los valores de memoria utilizados por la JVM sobre la que se ejecuta JMeter se puede mejorar notablemente el rendimiento del mismo. Puedes jugar con los valores Xms y Xmx. Recuerda actualizar también el valor del parámetro MaxNewSize para respetar el ratio original entre Xmx y MaxNewSize.

Formato de los resultados

JMeter ofrece dos formatos en los que pintar los datos obtenidos, CSV y XML. Realmente los valores son los mismos y el uso de CSV reduce el consumo de CPU y memoria. Una vez tengamos los datos, ya se formatearán según se necesite, xml, html, …

Para no modificar la configuración original de JMeter, puedes añadir las siguientes líneas en el fichero user.properties para obtener una salida con formato CSV. Echale un vistazo a las propiedades disponibles para activarlas/desactivarlas según necesidad.

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.data_type=false
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
jmeter.save.saveservice.response_data.on_error=false
jmeter.save.saveservice.response_message=false
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=false
jmeter.save.saveservice.assertions=false
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.response_message=false
jmeter.save.saveservice.assertion_results_failure_message=false
jmeter.save.saveservice.timestamp_format=HH:mm:ss
jmeter.save.saveservice.default_delimiter=;
jmeter.save.saveservice.print_field_names=true

Validaciones y expresiones regulares

No es necesario comprobar cada peticion. Agrupalas y comprueba el resultado de flujos completos. Evita las validaciones más costosas como: xml assertion, xml schema assertion xPath assertion.

Cuando necesites utilizar un extractor de expresión regular, no captures el cuerpo de la respuesta completo sin escapar. Restringe el ámbito a lo estrictamente necesario.

Generación de informes

Una vez tengamos los datos de los resultados, podemos tratarlos del modo necesario para conseguir el informe deseado. Recuerda que puedes utilizar la funcionalidad de gráficas de JMeter cargando el fichero de resultados desde la interfaz. También puedes parsear los resultados a un archivo html como este utilizando algún plugin.

Tienes más información sobre el análisis de logs aqui

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s