Pruebas de Rendimiento TIC
Pruebas de Rendimiento TIC
Pruebas de Rendimiento TIC
Rendimiento
TIC
Gua prctica para
profesionales con poco
tiempo y muchas cosas
por hacer.
Javier Medina
Primera edicin: mayo de 2014
Segunda edicin: julio de 2014
Ttulo original: Pruebas de rendimiento TIC
Diseo de portada: Javier Medina
2014, Javier Medina
De la presente edicin:
2014, SG6 C.B.
C/ ngel 2, 3C
30163, Laderas del Campillo (Murcia)
info@sg6.es
www.sg6.es
N ISBN: 978-1-312-31567-9
Esta obra est licenciada bajo la Licencia Creative Commons
SinDerivar 4.0 Internacional. Para ver una copia de esta licencia, visita
http://creativecommons.org/licenses/by-nc-
30163, Laderas del Campillo (Murcia)
Esta obra est licenciada bajo la Licencia Creative Commons Atribucin-NoComercial-
SinDerivar 4.0 Internacional. Para ver una copia de esta licencia, visita
-nd/4.0/.
A los que me habis aguantado mientras lo he escrito.
A los correctores, casi involuntarios, quiz algo forzosos
A ti, que lo ests leyendo.
Pruebas de Rendimiento TIC 7
NDICE
NDICE .............................................................................................................. 7
PRLOGO ........................................................................................................ 9
OTRO LIBRO SOBRE LO MISMO? .................................................................. 11
GLOSARIO | 0................................................................................................. 13
INTRODUCCIN | 1 ........................................................................................ 17
1.1 |ENFOQUE Y DESTINATARIOS ............................................................................ 18
1.2 | QU ES UNA PRUEBA DE RENDIMIENTO? ........................................................ 19
1.3 | PARA QU SIRVE UNA PRUEBA DE RENDIMIENTO? ............................................ 21
1.4 | IDEAS ERRNEAS ......................................................................................... 22
1.5 | CMO USAR ESTA GUA? ............................................................................. 25
ENTRANDO EN MATERIA | 2 .......................................................................... 27
2.1 | TIPOS DE PRUEBAS ....................................................................................... 29
2.2|PERSPECTIVA DE EVALUACIN .......................................................................... 36
2.3 | MEDIDAS Y MTRICAS .................................................................................. 41
2.4 | EVALUACIN DE ARQUITECTURAS MULTICAPA ................................................... 46
2.5 | ANLISIS COMPARATIVO: PERFILES "BASE". ...................................................... 51
2.6 | USUARIOS: GLOBALES, DEL SERVICIO, POR MES/DA/HORA, ACTIVOS VS. SIMULTNEOS
VS. CONCURRENTES... ........................................................................................... 56
HERRAMIENTAS | 3 ....................................................................................... 61
3.1 | RENDIMIENTO WEB: LAS HERRAMIENTAS CLSICAS ............................................. 63
3.2 | RENDIMIENTO NO WEB: HERRAMIENTAS ESPECFICAS .......................................... 81
3.3 | APACHE JMETER: LA NAVAJA SUIZA. ................................................................ 83
3.4 | FRAMEWORKS: SCRIPTING PARA GENTE ELEGANTE .............................................. 99
PLANIFICACIN| 4 ....................................................................................... 103
4.1 | OBJETIVOS: POR QU? .............................................................................. 105
4.2 | TIPO: QU? ............................................................................................ 107
4.3 | ENTORNO Y CICLO DE VIDA: DNDE? ........................................................... 109
4.4 | CARGA: CUNTA? .................................................................................... 117
8 ndice
4.5 | OTRAS PREGUNTAS "SECUNDARIAS". ............................................................. 124
4.6 | UN EJEMPLO PARA TERMINAR ...................................................................... 127
DISEO Y EJECUCIN | 5 .............................................................................. 131
5.1 | DISEO Y CONSTRUCCIN DE PRUEBAS .......................................................... 133
5.2 | PROBLEMAS HABITUALES EN LA FASE DE DISEO .............................................. 161
5.4 | EJECUTAR LA PRUEBA ................................................................................. 176
5.5 | PROBLEMAS COMUNES EN LA FASE DE EJECUCIN ............................................ 179
ANLISIS DE RESULTADOS | 6 ....................................................................... 183
6.1 | LA NORMALIDAD EN EL RENDIMIENTO ............................................................ 185
6.2 | LA ANORMALIDAD EN EL RENDIMIENTO .......................................................... 190
6.3 |RENDIMIENTO: ERRORES Y OPTIMIZACIN ....................................................... 194
6.4| EXTRAPOLAR DATOS DE RENDIMIENTO ............................................................ 198
CASO PRCTICO | 7 ...................................................................................... 203
7.1 | PRIMERA PARTE: MOODLE PREPRODUCCIN ................................................... 203
7.2 | SEGUNDA PARTE: MOODLE PRODUCCIN ....................................................... 218
7.3 | TERCERA PARTE: MOODLE SGBD ................................................................... 220
Pruebas de Rendimiento TIC 9
PRLOGO
Fue a mediados del ao 2008 cuando conoc al autor del libro:
Javier Medina. Un joven consultor de una recin creada empresa: SG6. Se
present con un proyecto de pruebas de intrusin en mi despacho de
Director del Servicio de Tecnologas de la Informacin y las Comunicaciones
(STIC) de la Universidad de Almera. En ese momento comenz una
colaboracin entre nuestras organizaciones, que todava contina, que ha
dado numerosos frutos y que ha permitido crecer y mejorar a ambas.
Este libro es uno de los resultados de esa colaboracin. En este caso
de la necesidad por parte del STIC de formar a aquellos de nuestros tcnicos
que en algn momento se ven ante la necesidad de ejecutar una prueba de
rendimiento en nuestro sistema de informacin. La idea, en definitiva, ha
sido crear algo para aquellas personas que realizan otras tareas en el mbito
de las TIC y que solo de forma espordica se van a ver en la necesidad
afrontar esta tarea.
Las caractersticas personales del autor, clarividencia, tozudez,
versatilidad y sentido prctico, se reflejan en este libro que tienes en tus
manos. El objetivo de explicar qu es y cmo realizar e interpretar de forma
correcta una prueba de rendimiento est sin duda ms que conseguido a lo
largo de sus captulos.
Por ello, si quieres o tienes que aprender a hacer pruebas de
rendimiento y no quieres ni perder tiempo, ni que te mareen, mi
recomendacin es que lo leas.
Diego Prez Martnez
10 Prlogo
Pruebas de Rendimiento TIC 11
OTRO LIBRO SOBRE LO MISMO?
Parece que s, que otro libro ms sobre lo mismo. Pero con matices.
La gua que tienes entre las manos (o que ests leyendo en una pantalla) es
la respuesta a una necesidad de trabajo que ha ido creciendo casi sin
pretenderlo. Y que adems, parece, puede ser til a ms gente.
La tarea empez, como cuenta el prlogo, con la idea de formar
profesionales IT que no son, ni quieren ser, expertos en pruebas de
rendimiento. Administradores de sistemas, administradores de red o
desarrolladores que ven stas pruebas como una herramienta ms de su
trabajo. Una herramienta a usar cada cierto tiempo, cuando hay un
problema o duda que responder. Y en consecuencia quieren claridad y
practicidad porque despus de la prueba de rendimiento hay que volver al
quehacer diario: subir de versin una base de datos, programar una nueva
aplicacin, actualizar el firmware de un router...
Al principio del proyecto, no obstante, no estaba nada claro que
hiciese falta escribir un nuevo libro (de libros innecesarios ya est lleno el
mundo). Al ojear lo que ya haba escrito, salvo no encontrar casi nada en
castellano, no aparecan ms motivos. The Art of Application Performance
Testing, Performance Testing Guidance for Web Applications, Performance
Testing with Jmeter... aparentaban ser suficientes pginas ya escritas.
Y convencido estaba de no tener que escribir hasta que rele con
ms detenimiento algunos de ellos. Dndome cuenta de algo en lo que
nunca me haba fijado: eran libros cuyo pblico objetivo son profesionales
interesados en profundizar en las mejores prcticas sobre estos asuntos. Sin
embargo, no terminan de encajar ante la necesidad de un texto con el que
guiar a perfiles que no desean, ni necesitan, ser expertos.
Es decir, para formar un grupo heterogneo, como el del proyecto
que ha originado este texto, son libros a los que les falta realismo
domstico.
12 Otro libro sobre lo mismo?
Falta concisin, pragmatismo, casos prcticos, uso demostrativo de
herramientas, ejemplos para la interpretacin de resultados, parecen
escritos para alguien que ya sabe de qu le ests hablando. Por tanto, s que
exista un motivo para escribir algo nuevo.
Una vez escrito, el siguiente paso ha venido un poco rodado: no
parece disparatado pensar que la necesidad original no pueda ser la
necesidad de otras organizaciones: disponer de profesionales IT con perfiles
heterogneos que realicen de pruebas de rendimiento, puntuales, como
parte de su trabajo.
Pruebas que les permitan contestar de forma adecuada a las
preguntas que surgen, da a da, en la gestin de un sistema de informacin:
Cuntos usuarios soportar como mximo nuestra nueva aplicacin? El
cambio de tecnologa en los servidores de base de datos ha tenido un
impacto en el rendimiento del sistema? Podemos atender un nmero de
usuarios concreto y mantener la calidad de servicio? ...
Preguntas cotidianas que en el momento que puedan estar
quedando sin respuesta, justifican no slo ya escribir, sino, ms importante,
hacerlo pblico y accesible digitalmente a todos los que la necesiten, bajo
formato Creative Commons, as como distribuirlo impresa en papel para los
que prefieran su adquisicin en soporte fsico.
Sin ms, de verdad, espero que sea til.
Javier Medina.
Pruebas de Rendimiento TIC 13
GLOSARIO | 0
Capacidad
La capacidad de un sistema es la carga total de trabajo que puede asumir
ese sistema manteniendo unos determinados criterios de calidad de servicio
previamente acordados.
Carga de Trabajo
La carga de trabajo es el conjunto de tareas aplicadas a un sistema de
informacin para simular un patrn de uso, en lo que respecta a la
concurrencia y / o entradas de datos. La carga de trabajo se simula a partir
del nmero total de los usuarios, de los usuarios activos simultneos, del
volumen de transacciones y de los tipos de transacciones empleados.
Escalabilidad
La escalabilidad se refiere a la eficacia de un sistema de informacin para
gestionar el incremento de la carga de trabajo, aprovechando los recursos
del sistema: procesador, memoria, ...
Estabilidad
En el contexto de las pruebas de rendimiento, la estabilidad se refiere a la
fiabilidad general del sistema, la robustez y ausencia de fallos en las
respuestas, la integridad funcional y de datos ante situaciones de alta carga,
la disponibilidad del servicio y la consistencia en los tiempos de respuesta.
Investigacin
La investigacin son todas las actividades relacionadas con la recopilacin
de informacin sobre tiempos de respuesta, escalabilidad, estabilidad, ...
que se emplean para probar o refutar una hiptesis sobre la causa raz de
un problema de rendimiento.
14 Glosario | 0
Latencia
La latencia es una medida del retardo en el procesamiento de la
informacin. Es decir es el tiempo que transcurre esperando una respuesta
sin que exista procesamiento de informacin. La latencia puede ser
compuesta por un sumatorio de los retardos de cada subtarea.
Metas
Las metas de rendimiento son objetivos de rendimiento de carcter interno
que se desean cumplir antes de la liberacin de un servicio. Las metas son
negociables, adaptables y no dependen del cliente.
Mtrica
Las mtricas son conjuntos de medidas obtenidas a partir de pruebas de
rendimiento que presentan un contexto, poseen un sentido y transmiten
una informacin.
Objetivos
Los objetivos de rendimiento son los valores deseados del rendimiento de
un sistema. Se obtienen directamente de las mtricas. Los objetivos de
rendimiento agrupan, por tanto, metas y requisitos.
Rendimiento
El rendimiento es el nmero de unidades de trabajo que se pueden
gestionar por unidad de tiempo; por ejemplo, peticiones por segundo,
llamadas por da, visitas por segundo, informes anuales, ...
Requisitos
Los requisitos de rendimiento son objetivos dependientes del cliente y, por
tanto, de obligado cumplimiento antes de la liberacin de un servicio.
Pruebas de Rendimiento TIC 15
Saturacin
Punto mximo de utilizacin de un sistema a partir del cual se degrada el
rendimiento del mismo.
Tiempo de respuesta
El tiempo total que tarda un sistema de informacin en atender una
peticin de usuario, incluye el tiempo de transmisin, el tiempo de latencia
y el tiempo de procesamiento.
Umbral de rendimiento
Los umbrales de rendimiento son los valores mximos aceptables para cada
uno de los objetivos que conforman una prueba de rendimiento.
Utilizacin
Porcentaje de tiempo que un recurso est ocupado atendiendo las
peticiones provenientes del usuario.
16 Glosario | 0
Pruebas de Rendimiento TIC 17
INTRODUCCIN | 1
Empezamos con un primer captulo donde tratar cinco puntos
bsicos, que incluso pueden parecer poco importantes, pero que nos sern
de utilidad en las siguientes partes y, lo principal, permiten a cualquiera que
eche un vistazo saber si es esta gua es lo que necesita o si por el contrario
est buscando otra cosa.
Enfoque y destinatarios. Cul es la finalidad y para qu personas
est pensado este texto. Importante la parte del enfoque para
entender el resto de la gua.
Qu es una prueba de rendimiento? Explicacin breve y sencilla
de, segn el enfoque que hemos tomado, qu son las pruebas de
rendimiento.
Para qu sirve una prueba de rendimiento? El siguiente paso a
conocer qu son es saber para qu las podemos utilizar.
Ideas errneas. Ms importante que saber para qu las podemos
utilizar, est el conocer qu ideas debemos desterrar, porque en
caso de no hacerlo posiblemente nos equivoquemos al usarlas.
Cmo usar esta gua? Como ltimo punto del captulo, una vez
que sepamos si somos los destinatarios adecuados, qu son las
pruebas de rendimiento, para qu sirven y para qu no sirven,
tendremos un pequeo resumen de los siguientes captulos y unas
recomendaciones de uso.
18 Introduccin | 1
1.1 |ENFOQUE Y DESTINATARIOS
Los destinatarios de este libro son profesionales en los campos de
las tecnologas de la informacin y la comunicacin que, sin dedicarse a ello
a tiempo completo y sin intencin de convertirse en expertos de la
disciplina, necesitan hacer pruebas de rendimiento como parte de su
trabajo; usando herramientas de acceso pblico, gratuito y libre.
El enfoque de la gua, siendo consecuentes con el pblico objetivo,
es reduccionista. Es decir, lo que lees en ningn momento pretende ser la
biblia de las pruebas de rendimiento; sino todo lo contrario.
En todo momento se intenta simplificar, descartar informacin
excesiva, agrupar casos habituales y procedimentar la realizacin de
pruebas de rendimientos.
La idea es que cualquiera, incluso sin nunca haber hecho una antes,
con un poco de esfuerzo por su parte, consiga dar respuesta a las preguntas
ms comunes a las que una prueba de este tipo responde.
La decisin de simplificar, descartar, agrupar y procedimentar
implica, no puede ser de otra forma, una prdida de precisin y de exactitud
en las pruebas que se realicen usando este texto como base. Usando
metodologas ms completas y enfoques ms globales los resultados que se
obtendrn sern ms precisos.
Sin embargo, nuestra finalidad es otra.
Queremos obtener resultados lo suficientemente buenos como
para que sean vlidos en la toma de decisiones. Y queremos que estos
resultados puedan ser obtenidos por cualquiera profesional de los que
conforman un rea/departamento TIC.
Este es el enfoque de esta gua. Esperemos que te sea til.
Pruebas de Rendimiento TIC 19
1.2 | QU ES UNA PRUEBA DE RENDIMIENTO?
Segn dice esa fuente del saber humano llamada Wikipedia
1
: En la
ingeniera del software, las pruebas de rendimiento son las pruebas que se
realizan [..] para determinar lo rpido que realiza una tarea un sistema en
condiciones particulares de trabajo. Tambin puede servir para validar y
verificar otros atributos de la calidad del sistema, tales como la
escalabilidad, fiabilidad y uso de los recursos. Las pruebas de rendimiento
son un subconjunto de la ingeniera de pruebas, una prctica informtica
que se esfuerza por mejorar el rendimiento, englobndose en el diseo y la
arquitectura de un sistema, antes incluso del esfuerzo inicial de la
codificacin.
La definicin de Wikipedia es completa, sin embargo, en lnea con
el enfoque de la gua, ms que determinar lo rpido que se realiza un
trabajo, la idea con la que nos vamos a mover es la de determinar si el
trabajo se realiza dentro de unos parmetros de calidad de servicio.
Por tanto una buena definicin de qu es una prueba de
rendimiento sera:
Un conjunto de pruebas que se realizan para determinar si un
servicio IT atiende a sus usuarios dentro de unos parmetros de
calidad de servicio (tiempo de respuesta, disponibilidad, ...) ante
unas condiciones determinadas del sistema de informacin
(nmero de usuarios, tipo de peticiones, tiempo...).
Traducido a algo ms tangible. Ejemplo: realizar unas pruebas para
conocer si ante un volumen concreto de usuarios nuestra aplicacin web de
reservas es capaz de atender las peticiones ms habituales de una sesin de
navegacin en menos de 2 segundos.
1
http://es.wikipedia.org/wiki/Pruebas_de_rendimiento_del_software
20 Introduccin | 1
Anatoma de una prueba de rendimiento
Dejando al margen definiciones, el siguiente diagrama
ilustra de forma sencilla qu fases encontramos en una prueba de
rendimiento, en qu consisten y cmo se relacionan entre ellas.
Importante ver que se distinguen
puramente tcnica (la ejecucin de
proceso.
Anatoma de una prueba de rendimiento
Dejando al margen definiciones, el siguiente diagrama [Figura 1.1]
qu fases encontramos en una prueba de
rendimiento, en qu consisten y cmo se relacionan entre ellas.
se distinguen tres fases y observar que la parte
la prueba) es una pequea parte del
Pruebas de Rendimiento TIC 21
1.3 | PARA QU SIRVE UNA PRUEBA DE RENDIMIENTO?
Una prueba de rendimiento, dependiendo del tipo de prueba, ms
adelante veremos los tipos, y del punto del ciclo de vida del servicio en los
que se realicen pruebas puede tener utilidades diversas.
Fase de desarrollo
Deteccin de defectos de rendimiento tempranos.
Fase de Preproduccin
Predecir el funcionamiento de la aplicacin en el entorno
produccin en base a unas estimaciones de uso y escalado.
Deteccin de errores o defectos de rendimiento en el servicio
(software o hardware).
Comparar el rendimiento del servicio en preproduccin con el de
otros servicios evaluados o con un baseline previo (en el siguiente
captulo veremos el concepto del "perfil base") pudiendo establecer
criterios de paso a produccin.
Fase de Produccin
Evaluar si un servicio se adeca correctamente a las necesidades de
calidad de servicio del usuario (principalmente en parmetros de
tiempo de respuesta)
Evaluar la estabilidad y la degradacin del servicio.
Evaluar cmo cambios en la infraestructura IT que sustenta el
servicio (bases de datos, servidores de aplicacin, infraestructura
de red) afecta al rendimiento del mismo.
Deteccin de defectos y mejoras de eficiencia: cuellos de botella,
comportamiento ante niveles de carga, ...
22 Introduccin | 1
1.4 | IDEAS ERRNEAS
Dos ideas errneas estn muy generalizadas cuando se habla de
pruebas de rendimiento. La primera es olvidar qu significa simular y la
segunda es dar demasiada importancia a los datos.
Ideas que son bastante pertinaces y que muchas veces se cuelan
incluso en el discurso de los ms doctos en la materia (esperamos que en
esta gua se hayan mantenido a raya).
Olvidar qu significa simular
Por muy bien que lo hagamos, por muy meticulosos, globales y
concienzudos que seamos realizando una prueba de rendimiento
(muchsimos ms concienzudos que lo que contempla esta gua) al final
nuestra prueba de rendimiento es una simulacin de un subconjunto de
acciones plausibles sobre un servicio/aplicativo.
Por ello, no vamos a poder tener una equivalencia absoluta
respecto a los eventos a los que el servicio o la aplicacin se enfrentarn en
un futuro. Podremos aproximarnos, podremos predecir, podremos estimar,
pero no podremos conocer con exactitud qu pasar en la realidad.
En consecuencia, cuando realicemos una prueba de rendimiento
debemos tener siempre presente, y nunca olvidar, que los resultamos que
obtengamos son una aproximacin a lo que podra suceder, que son
susceptibles de error y que las decisiones que tomemos en base a ellos
deben contemplar esa posibilidad de error.
Ejemplificando, quiz de forma un poco burda, tiene poco sentido
pensar que porque nuestra aplicacin se ha comportado de forma
"adecuada" ante 50 usuarios simultneos en una prueba de carga de 20
minutos de duracin en preproduccin, va a hacer lo mismo en el entorno
de produccin enfrentndose a esos mismos 50 usuarios simultneos
durante meses (crecimiento de la base de datos, aumento de ficheros
temporales, incremento de informacin almacenada en disco, ...).
Dar demasiada importancia a los datos
Quiz porque, a priori, puede parecer que la parte ms compleja de
una prueba de rendimiento es la parte tcnica, es decir,
las herramientas para obtener los datos de rendi
sobrevaloracin de los mismos. Pero la realidad es que
obtienen son slo eso, datos. Y deben ser inter
contexto; que es la parte verdaderament
dejadez, es fcil cometer errores.
Cuando hacemos pruebas
de rendimiento lo que obtenemos
son parmetros sin ningn
significado por ellos mismos:
Tiempo de respuesta, nmero de
peticiones atendidas, nmero de
peticiones errneas... nicamente
datos que en bruto, resultado de
finalizar la prueba.
Sin embargo, a poco que lo
pensemos durante un instante, veremos que
respuesta puede ser vlido para un tipo de aplicacin y
para otro tipo de aplicacin; de la misma forma que 10 fall
peticiones puede ser una cifra aceptable o puede ser totalmente
inaceptable, segn lo que estemos tratando.
Por tanto, debemos entender, desde el principio, que
efectivamente para que una prueba de rendimiento sea til est claro que
debemos obtener datos, y de la mayor calidad, pero una vez obtenidos, el
problema pasa a ser otro.
Un ejemplo sencillo para ver que realmente un dato
gran valor sin una interpretacin del mismo y un contexto
1 que podemos encontrar en la siguiente pgina.
Pruebas de Rendimiento TIC 23
Dar demasiada importancia a los datos
puede parecer que la parte ms compleja de
rendimiento es la parte tcnica, es decir, la preparacin de
para obtener los datos de rendimiento, se puede caer en la
Pero la realidad es que los datos que se
obtienen son slo eso, datos. Y deben ser interpretados y puestos en
ue es la parte verdaderamente til del asunto y donde, por
Cuando hacemos pruebas
de rendimiento lo que obtenemos
n
significado por ellos mismos:
nmero de
nmero de
nicamente
do de
Sin embargo, a poco que lo
pensemos durante un instante, veremos que 3 segundos de tiempo de
respuesta puede ser vlido para un tipo de aplicacin y totalmente inviable
n; de la misma forma que 10 fallos por cada 1000
peticiones puede ser una cifra aceptable o puede ser totalmente
inaceptable, segn lo que estemos tratando.
Por tanto, debemos entender, desde el principio, que
efectivamente para que una prueba de rendimiento sea til est claro que
emos obtener datos, y de la mayor calidad, pero una vez obtenidos, el
Un ejemplo sencillo para ver que realmente un dato no tiene un
sin una interpretacin del mismo y un contexto es el EJEMPLO 1-
ar en la siguiente pgina.
24 Introduccin | 1
EJEMPLO 1-1
Tenemos una nueva aplicacin en pre
Se realizan un conjunto pruebas de carga
siguientes datos.
Podemos obtener alguna conclusin a partir de los mismos
Podemos, por ejemplo, saber si la aplicacin est lista para su paso
a produccin?
Parece evidente que no es posible de
datos precisos) porque carecemos de contexto y de
interpretacin de resultados.
aplicacin que van a usar unas pocas decenas de
milisegundos es un tiempo razonable de respuesta. Pero y si la van
a usar miles? Son ms de
respuesta? Como usuarios, nos imaginamos
una respuesta de Google? Y esperando esos 4 segundos para
generar el listado de operaciones de las ltimos 24 meses de
nuestro servicio de banca online?
Contexto e interpretacin de resultados
Tenemos una nueva aplicacin en pre-produccin.
Se realizan un conjunto pruebas de carga bsicas y se obtienen los
Podemos obtener alguna conclusin a partir de los mismos?
o, saber si la aplicacin est lista para su paso
Parece evidente que no es posible determinarlo (aunque tengamos
) porque carecemos de contexto y de una
interpretacin de resultados. Podramos pensar que si es una
unas pocas decenas de usuarios, 500
milisegundos es un tiempo razonable de respuesta. Pero y si la van
4 segundos un tiempo razonable de
nos imaginamos 4 segundos esperando
? Y esperando esos 4 segundos para
generar el listado de operaciones de las ltimos 24 meses de
nuestro servicio de banca online?
de resultados son lo que dan valor.
Pruebas de Rendimiento TIC 25
1.5 | CMO USAR ESTA GUA?
Esta gua tiene dos partes. Por un lado, una primera parte, que
tiene un enfoque introductorio, y por otro, una segunda parte destinada a la
creacin de pruebas y a la evaluacin de rendimiento que termina con un
caso prctico completo.
Si nunca has hecho una prueba de rendimiento, el uso ms
razonable sera, primero leer bien la parte terica, sobre todo los primeros
captulos, sin prisas y detenindose en los ejemplos que hay en ella. Para
una vez hecho, pasar a la parte final, donde lo recomendable sera
reproducir los casos prcticos.
Por el contrario si ya ests mnimamente familiarizado con las
pruebas de rendimiento, es posible que las partes ms interesantes sean las
dedicadas al diseo y construccin de pruebas, la dedicada a evaluacin de
resultados y el caso prctico final.
26 Introduccin | 1
Pruebas de Rendimiento TIC 27
ENTRANDO EN MATERIA | 2
Este captulo nmero dos tiene por objetivo tratar una serie de conceptos,
algunos ellos bsicos, que es necesario conocer antes de entrar a explicar
una metodologa para la realizacin de pruebas de rendimiento o de
analizar herramientas con las que realizar estas pruebas. Son los siguientes.
Tipo de pruebas. Cuando hablamos de pruebas de rendimiento
agrupamos en un trmino muchos tipos diferentes de pruebas, con
distintas finalidades. Pruebas de carga, pruebas de stress o pruebas
de capacidad, son conceptos que en principio pueden parecer "lo
mismo"; pero que no lo son.
Perspectiva de evaluacin. Otro asunto importante es entender lo
que se conoce como perspectiva de evaluacin. Es decir, en la piel
de quin nos ponemos cuando realizamos la prueba de
rendimiento. No es lo mismo realizar la prueba de rendimiento
desde la perspectiva del usuario final, que desde la perspectiva de
un desarrollador o de la de un administrador de sistemas.
Medidas y Mtricas. Hasta ahora hemos hablado de algunas de
ellas, por ejemplo, tiempos de respuesta o nmero de peticiones
errneas. Sin embargo existen otras y adems debemos ahondar en
la construccin de mtricas a partir de ellas.
Evaluacin de arquitecturas multicapa. Hoy da un amplio nmero
de pruebas de rendimiento se realizan sobre la capa de
servicio/aplicacin web, sin embargo existen otras capas (red,
datos, etc.) que es conveniente conocer y de las que debemos
valorar sus implicaciones para obtener calidad en los datos de
rendimiento obtenidos.
28 Entrando en materia | 2
Perfiles Base. En el primer captulo se nombraron, sin explicarlos,
los baseline o perfiles "base". Una herramienta de trabajo
hora de realizar pruebas de rendimiento
comparaciones. Ha llegado el momento de expli
Usuarios. Es lo mismo un usuario simultneo que uno
concurrente? Cmo influye el nmero total de usuarios del
aplicativo en el rendimiento? Son conceptos que en ocasiones se
mezclan, hablando indistintamente de simultneo, de concurre
o simplemente de "usuarios", cuando en realidad hay que
diferenciarlos y debemos profundizar en esas diferencias pues son
muy significativas a la hora de hacer pruebas de rendimiento.
En el primer captulo se nombraron, sin explicarlos,
o perfiles "base". Una herramienta de trabajo til a la
hora de realizar pruebas de rendimiento y establecer
a llegado el momento de explicarla con detalle.
Es lo mismo un usuario simultneo que uno
concurrente? Cmo influye el nmero total de usuarios del
aplicativo en el rendimiento? Son conceptos que en ocasiones se
mezclan, hablando indistintamente de simultneo, de concurrente
o simplemente de "usuarios", cuando en realidad hay que
diferenciarlos y debemos profundizar en esas diferencias pues son
muy significativas a la hora de hacer pruebas de rendimiento.
2.1 | TIPOS DE PRUEBAS
A la hora de expresarnos
rendimiento, mientras que otras decimos cosas como
de stress o cualquier idea que nos suene parecida. Al hacerlo
abusos del lenguaje, incluso pequeas atrocidades, porque realmente una
prueba de carga y una prueba de stress son
Vamos a intentar explicar esas diferencias y mas all de la
diferencias, lo verdaderamente importante: para qu sirve cada tipo de
prueba y qu prueba tenemos que hacer segn lo que queramos averiguar.
Como aclaracin previa, estas definiciones no son axiomas y entre algunas
de ellas hay tanta relacin que es difcil separarlas.
Pruebas de
Rendimiento
Pruebas de
Carga
Pruebas de
Resistencia
o Estabilidad
Pruebas de
Stress
Variacin de
Pruebas de Rendimiento TIC 29
unas veces hablamos de pruebas de
otras decimos cosas como pruebas de carga, test
nos suene parecida. Al hacerlo cometemos
abusos del lenguaje, incluso pequeas atrocidades, porque realmente una
a y una prueba de stress son algo distinto.
Vamos a intentar explicar esas diferencias y mas all de la
diferencias, lo verdaderamente importante: para qu sirve cada tipo de
prueba y qu prueba tenemos que hacer segn lo que queramos averiguar.
racin previa, estas definiciones no son axiomas y entre algunas
de ellas hay tanta relacin que es difcil separarlas.
Pruebas de
Rendimiento
Pruebas de
Stress
Pruebas de
Variacin de
Carga
Pruebas de
Capacidad
30 Entrando en materia | 2
Pruebas de rendimiento
Pruebas de rendimiento son todas las pruebas que vamos a ver a
continuacin. Es frecuente que cuando se habla de "realizar pruebas de
rendimiento a un sistema" se est agrupando en un slo concepto la
realizacin simultnea de varias pruebas, por ejemplo: una prueba de carga,
una prueba de resistencia y una prueba de stress.
Prueba de carga
Se trata de la prueba de rendimiento ms bsica.
El objetivo de una prueba de carga es evaluar el comportamiento
del sistema bajo una cantidad de peticiones determinadas por segundo.
Este nmero de peticiones, a nivel bsico, puede ser igual que el nmero de
usuarios concurrentes esperados en la aplicacin ms/menos unos
mrgenes.
Los datos a recopilar son principalmente dos: tiempo de respuesta
de la aplicacin y respuestas errneas.
La ejecucin de una prueba de carga, por tanto, consiste en
seleccionar un nmero usuarios concurrentes/simultneos estimados y
medir los parmetros elegidos en una serie de repeticiones de la prueba,
determinando si se mueven en umbrales aceptables de rendimiento.
Un detalle importante es que dependiendo del autor/escuela del
libro que tengamos delante nos dirn que la prueba de carga tambin sirve
para determinar el punto de ruptura del servicio. Esta informacin, en
opinin del que escribe, es parcialmente falsa. El punto de ruptura del
servicio, es decir, el nmero de peticiones a partir de los cuales la aplicacin
deja atender al usuario, slo se identificar en una prueba de carga si
existen errores/defectos de rendimiento en la aplicacin. Es decir, si el
punto de ruptura del servicio est por debajo del nmero de peticiones que
se espera que la aplicacin deba soportar. Pero no ser objetivo de la
prueba de carga encontrarlo.
EJEMPLO 2-1
El grfico 1 de este ejemplo muestra
carga para un sistema donde se han estimado 30 usuarios
concurrentes con 1 peticin por segundo
unos mrgenes de seguridad de +/
El siguiente grfico, por el contrario muestra el resultado que
obtendramos en caso de existir algn error/defecto de
rendimiento que hara aparecer el punto d
durante la prueba de carga.
0
50
100
150
200
250
300
20 25
V
a
l
o
r
e
s
Usuarios concurrentes
Ejemplo 2-1 | Prueba de Carga 2
Pruebas de Rendimiento TIC 31
El grfico 1 de este ejemplo muestra el resultado de una prueba de
carga para un sistema donde se han estimado 30 usuarios
eticin por segundo y donde se han evaluado
unos mrgenes de seguridad de +/- 10 usuarios.
, por el contrario muestra el resultado que
obtendramos en caso de existir algn error/defecto de
rendimiento que hara aparecer el punto de ruptura del servicio
30 35 40
Usuarios concurrentes
1 | Prueba de Carga 2
Tiempo medio(s)
Errores
32 Entrando en materia | 2
Prueba de resistencia
Las pruebas de resistencia, tambin llamadas de estabilidad, son
una variante de las pruebas de carga.
El objetivo de una prueba de resistencia/estabilidad es determinar
el comportamiento de la aplicacin a lo largo del tiempo
degradacin del rendimiento derivada del uso sostenido
El tiempo de prueba ms comn suelen ser un
minutos. Un ejemplo tpico de prueba de carga podran ser:
haciendo una o dos peticiones por segundo
crecimiento de 2 minutos y un periodo estable de 3
de carga convencional difcilmente se va a poder apreciar la degradacin de
rendimiento derivada del uso continuad
semanas.
La ejecucin de una prueba de resistencia
prueba de carga, se usa como referente el nmero de usuarios concurrentes
esperados pero su duracin es de das.
EJEMPLO 2-2
El grfico nos muestra una prueba de resistencia durante 7 das.
Las pruebas de resistencia, tambin llamadas de estabilidad, son
El objetivo de una prueba de resistencia/estabilidad es determinar
ortamiento de la aplicacin a lo largo del tiempo y evaluar la
degradacin del rendimiento derivada del uso sostenido.
l tiempo de prueba ms comn suelen ser unas decenas de
Un ejemplo tpico de prueba de carga podran ser: 30 usuarios,
do una o dos peticiones por segundo cada usuario, con un periodo de
crecimiento de 2 minutos y un periodo estable de 3 minutos. En una prueba
de carga convencional difcilmente se va a poder apreciar la degradacin de
rendimiento derivada del uso continuado del aplicativo durante das o
de una prueba de resistencia es muy similar a una
prueba de carga, se usa como referente el nmero de usuarios concurrentes
das.
una prueba de resistencia durante 7 das.
Prueba de stress
Las pruebas de stress, a diferencia de las pruebas de carga
por objetivo determinar el punto de ruptura del servicio y analizar
causas que suelen estar derivadas de problemas que s
condiciones muy elevadas de carga:
capacidad, fugas de memoria, condiciones de carrera, ...
La prueba de stress se inicia con un nmero bajo de usuarios que se
duplican ciclo a ciclo hasta que se determina e
servicio. Se pueden simular peticiones continuas para aumentar la carga.
Para este tipo de pruebas puede ser necesario utilizar tcnicas
distribuidas de evaluacin, usando por tanto ms de un sistema, cuando es
necesario simular cantidades tan altas de usuarios
que un nico sistema es incapaz de generarlas.
EJEMPLO 2-3
El grfico nos muestra el resultado de una prueba de stress
Con una degradacin perceptible del servicio por encima de 160
usuarios concurrentes y con una ruptura del servicio por encima de
los 320 usuarios concurrentes.
Pruebas de Rendimiento TIC 33
a diferencia de las pruebas de carga, tienen
por objetivo determinar el punto de ruptura del servicio y analizar sus
derivadas de problemas que suceden ante
condiciones muy elevadas de carga: mala escalabilidad, agotamiento de
capacidad, fugas de memoria, condiciones de carrera, ...
La prueba de stress se inicia con un nmero bajo de usuarios que se
duplican ciclo a ciclo hasta que se determina el punto de ruptura del
Se pueden simular peticiones continuas para aumentar la carga.
Para este tipo de pruebas puede ser necesario utilizar tcnicas
distribuidas de evaluacin, usando por tanto ms de un sistema, cuando es
tidades tan altas de usuarios y peticiones por segundo
que un nico sistema es incapaz de generarlas.
El grfico nos muestra el resultado de una prueba de stress bsica.
Con una degradacin perceptible del servicio por encima de 160
oncurrentes y con una ruptura del servicio por encima de
los 320 usuarios concurrentes.
34 Entrando en materia | 2
Pruebas de variacin de carga o pruebas de picos de carga
Las pruebas de variacin de carga ( o pruebas de picos de carga ) es
un tipo muy concreto de prueba de st
sistema de informacin a unas condiciones
a las habituales (pico de carga), de tal forma que se pueda determinar qu
sucedera ante una avalancha puntual de usuarios (escalabilidad,
recuperacin de recursos, ...)
En este tipo de pruebas se parte del volumen normal de usuario
concurrentes del aplicativo y se introducen
La situacin idnea es que no exista pendiente entre las lneas que unen las
cotas superior e inferior en las iteraciones de la prueba.
EJEMPLO 2-4
El grfico nos muestra el resultado de una prueba de picos de carga
donde se parte de un escenario base habitual de 30 usuarios
concurrentes, se triplica esa carga y
una serie 6 iteraciones.
o pruebas de picos de carga
Las pruebas de variacin de carga ( o pruebas de picos de carga ) es
un tipo muy concreto de prueba de stress que tiene por objetivo exponer al
sistema de informacin a unas condiciones de carga varias veces superiores
a las habituales (pico de carga), de tal forma que se pueda determinar qu
valancha puntual de usuarios (escalabilidad,
En este tipo de pruebas se parte del volumen normal de usuarios
se introducen alternamente los picos de carga.
La situacin idnea es que no exista pendiente entre las lneas que unen las
uperior e inferior en las iteraciones de la prueba.
El grfico nos muestra el resultado de una prueba de picos de carga
donde se parte de un escenario base habitual de 30 usuarios
triplica esa carga y se vuelve al escenario base, en
Pruebas de capacidad
En todas las pruebas anteriores las
adelante hablaremos de ellas) son medidas
pruebas de capacidad la gran diferencia es el tipo
mide: consumo de CPU, memoria, ...
En una prueba de capacidad se puede simular
varias formas: como en una prueba de carga (usuarios estimados), como
una prueba de resistencia (usuarios estimados
prueba de stress (crecimiento de usuarios
El objetivo, en todos los casos,
determinado nmero de usuarios a los valores de capacidad del sistema de
informacin.
EJEMPLO 2-5
Resultado de una prueba de capacidad
creciente (2GB de disco por usuario)
comportamiento adecuado hasta 80 usuarios concurrentes.
lmite de capacidad est en
Pruebas de Rendimiento TIC 35
En todas las pruebas anteriores las medidas que se usan (ms
ablaremos de ellas) son medidas externas. Sin embargo, en las
pruebas de capacidad la gran diferencia es el tipo de parmetro que se
, memoria, ...
na prueba de capacidad se puede simular el uso del sistema de
una prueba de carga (usuarios estimados), como en
una prueba de resistencia (usuarios estimados y tiempo) o como en una
ueba de stress (crecimiento de usuarios hasta agotamiento de capacidad).
, en todos los casos, es medir cmo afecta un
determinado nmero de usuarios a los valores de capacidad del sistema de
e capacidad para un nmero de usuarios
(2GB de disco por usuario). El sistema muestra un
comportamiento adecuado hasta 80 usuarios concurrentes. El
160 usuarios concurrentes.
36 Entrando en materia | 2
2.2|PERSPECTIVA DE EVALUACIN
A la hora de realizar una prueba de rendimiento, da igual de cul de
todos los tipos que hemos comentado con anterioridad hagamos, siempre
aparece la duda sobre lo que se conoce como
que traducido a palabras mucho ms sencilla signific
generar las peticiones de la prueba y qu visin me va a dar esa,
llammosla, ubicacin?
A continuacin vamos a ver las 4 ubicaciones ms comunes para la
ejecucin de una prueba de rendimiento, agrupadas dos a dos en funcin de
su finalidad.
Perspectivas de anlisis interno
Las perspectivas para anlisis interno agrupan aquellas ubicaciones
que dejan fuera de la ecuacin la perspectiva del usuario
de la red.
Su principal ventaja es el significativo ahorro de costes y l
sencillez de las mismas. Obviamente, su principal desventaja es que
muy precisos que seamos en la evaluacin del rendimiento
ser, en el mejor de los casos, evaluado desde nuestra propia red interna.
Anlisis desde el propio sistema
Esta es la forma ms bsica de anlisis. Consiste,
como su propio nombre indica, en realizar las pruebas de
rendimiento desde el mismo sistema que queremos evaluar.
Las ventaja principal es la sencillez.
adicional, no congestionamos la red, no ...
Las desventajas tambin existen. La primera tiene que ver con la
precisin de la prueba, sobre todo en pruebas de alta carga, ya que nuestra
propia actividad de evaluacin genera carga sobre el sistema. La segunda es
el hecho de no evaluar el rendimiento de la red. La tercera es la cantidad de
CIN
ra de realizar una prueba de rendimiento, da igual de cul de
todos los tipos que hemos comentado con anterioridad hagamos, siempre
aparece la duda sobre lo que se conoce como perspectiva de evaluacin y
que traducido a palabras mucho ms sencilla significa: desde dnde
la prueba y qu visin me va a dar esa,
A continuacin vamos a ver las 4 ubicaciones ms comunes para la
ejecucin de una prueba de rendimiento, agrupadas dos a dos en funcin de
Las perspectivas para anlisis interno agrupan aquellas ubicaciones
la perspectiva del usuario y la visin externa
Su principal ventaja es el significativo ahorro de costes y la relativa
sencillez de las mismas. Obviamente, su principal desventaja es que, por
muy precisos que seamos en la evaluacin del rendimiento, ste siempre
en el mejor de los casos, evaluado desde nuestra propia red interna.
Esta es la forma ms bsica de anlisis. Consiste,
como su propio nombre indica, en realizar las pruebas de
rendimiento desde el mismo sistema que queremos evaluar.
Las ventaja principal es la sencillez. No necesitamos equipo
tionamos la red, no ...
Las desventajas tambin existen. La primera tiene que ver con la
precisin de la prueba, sobre todo en pruebas de alta carga, ya que nuestra
propia actividad de evaluacin genera carga sobre el sistema. La segunda es
evaluar el rendimiento de la red. La tercera es la cantidad de
carga que podemos generar usando un nico sistema y que puede ser
insuficiente para segn qu tipo de pruebas.
Este mtodo puede ser recomendable para la realizacin de
pruebas bsicas de carga en el entorno de preproduccin. Por contra es
desaconsejado para la realizacin de otro tipo de pruebas.
Anlisis desde la red interna
Esta es la forma ms comn de anlisis en
pruebas realizadas "en casa". Consiste, como su
propio nombre indica, en realizar las pruebas de
rendimiento desde uno o varios sistemas de la propia
red en la que se encuentra el sistema a evaluar.
Sus principales ventajas son el solucionar gran parte de las
deficiencias la ejecucin de la prueba desde el propio sistema (me
precisa, cantidad de carga, carga de red) adems de poderse aplicar a
cualquiera de los tipos de pruebas que existen: carga, stress, picos,
resistencia, capacidad, ...
El nico inconveniente es que, como no puede ser de otra forma,
no se tiene en cuenta el rendimiento del sistema desde la red externa,
quedando sin evaluar algunas situaciones (problemas de peering,
enrutamiento, ...) que pueden afectar al rendimiento del sistema cuando se
usa desde el exterior.
Este mtodo es el ms adecuado par
prueba donde no se quiera tener en cuenta la visin del usuario externo.
Pruebas de Rendimiento TIC 37
carga que podemos generar usando un nico sistema y que puede ser
insuficiente para segn qu tipo de pruebas.
Este mtodo puede ser recomendable para la realizacin de
ga en el entorno de preproduccin. Por contra es
desaconsejado para la realizacin de otro tipo de pruebas.
comn de anlisis en
pruebas realizadas "en casa". Consiste, como su
realizar las pruebas de
rendimiento desde uno o varios sistemas de la propia
red en la que se encuentra el sistema a evaluar.
Sus principales ventajas son el solucionar gran parte de las
deficiencias la ejecucin de la prueba desde el propio sistema (medida poco
precisa, cantidad de carga, carga de red) adems de poderse aplicar a
cualquiera de los tipos de pruebas que existen: carga, stress, picos,
El nico inconveniente es que, como no puede ser de otra forma,
n cuenta el rendimiento del sistema desde la red externa,
quedando sin evaluar algunas situaciones (problemas de peering,
enrutamiento, ...) que pueden afectar al rendimiento del sistema cuando se
Este mtodo es el ms adecuado para la realizacin de cualquier
prueba donde no se quiera tener en cuenta la visin del usuario externo.
38 Entrando en materia | 2
Perspectivas de anlisis externo
Las perspectivas para anlisis externo
que intentan evaluar el rendimiento desde la pers
aportar una visin externa del rendimiento
Su principal ventaja que aportan una visin ms precisa de cmo un
usuario final que opera desde fuera de nuestra red interna percibe el
rendimiento del sistema de informacin
por un lado el coste, y por otro la complejidad en la ejecucin de la prueba.
Anlisis desde la nube
Esta es la forma ms comn de anlisis en
pruebas realizadas desde el exterior, sobre todo la
realizadas por terceros. Consiste en
pruebas de rendimiento desde uno o varios sistemas
ubicados en un proveedor externo de red.
La principal ventaja es que, dentro de la complejidad de este tipo
de pruebas externas, es la menos compleja, obteniendo un resultado similar
al ejecutado desde red interna pero incluyendo en la ecuacin el anlisis
externo del rendimiento.
Su desventaja ms significativa, respecto al anlisis interno, es el
coste, no slo de alquiler de equipos, sino tambin de adecuacin de esos
equipos (p.ej. instalacin y configuracin de herramientas) para que sean
tiles como entorno de pruebas. No obstante, las arquitecturas cloud, con
el cobro por uso puntual y la posibilidad de importar mquinas virtuales
limitan las desventajas.
Este mtodo es el ms adec
prueba donde se quiera tener en cuenta la visin del usuario externo
(parcial) y el rendimiento externo de la red.
s externo agrupan aquellas ubicaciones
intentan evaluar el rendimiento desde la perspectiva del usuario y
aportar una visin externa del rendimiento.
que aportan una visin ms precisa de cmo un
usuario final que opera desde fuera de nuestra red interna percibe el
rendimiento del sistema de informacin. Sus principales desventajas son,
por un lado el coste, y por otro la complejidad en la ejecucin de la prueba.
Esta es la forma ms comn de anlisis en
pruebas realizadas desde el exterior, sobre todo la
realizadas por terceros. Consiste en realizar las
pruebas de rendimiento desde uno o varios sistemas
ubicados en un proveedor externo de red.
La principal ventaja es que, dentro de la complejidad de este tipo
de pruebas externas, es la menos compleja, obteniendo un resultado similar
tado desde red interna pero incluyendo en la ecuacin el anlisis
Su desventaja ms significativa, respecto al anlisis interno, es el
coste, no slo de alquiler de equipos, sino tambin de adecuacin de esos
lacin y configuracin de herramientas) para que sean
tiles como entorno de pruebas. No obstante, las arquitecturas cloud, con
el cobro por uso puntual y la posibilidad de importar mquinas virtuales
Este mtodo es el ms adecuado para la realizacin de cualquier
prueba donde se quiera tener en cuenta la visin del usuario externo
(parcial) y el rendimiento externo de la red.
Anlisis desde la perspectiva del usuario
Esta es una forma poco comn de anlisis
limitada nicamente a grandes pruebas de rendimiento
donde la visin del usuario es fundamental y donde
adems el enfoque del servicio es global
heterogneos y ubicaciones de red dispersas.
Este tipo de evaluacin
rendimiento desde mltiples ubicaciones y sistemas que simulen, de la
forma ms precisa posible, los distintos perfiles de usuario del sistema y sus
condiciones de acceso.
La principal ventaja es la capacidad de la prueba para
hasta el lmite que imponga nuestro bolsillo e imaginacin, la realidad del
acceso de usuarios a un aplicativo de uso global.
Su desventajas son, en consonancia
dificultad, los recursos, el tiempo ...
Este mtodo slo es recomendable para caso
donde se determina que los otros mtodos son insuficientes.
Una visin conjunta: las pruebas de capacidad
Hay una situacin un tanto particular que se da cuando lo que
queremos medir es la capacidad del sistema de informacin (uso de
memoria, disco, estado de un proceso, ...
En este caso concreto, es obvio que no nos vale slo con la
informacin que podramos obtener desde
(da igual que fuese desde la red local,
puntos externos), sino que adicionalmente necesitamos la visin desde el
propio sistema.
No obstante, en esta situacin
peticiones desde el exterior del sistema
medir el impacto que estamos gen
deseamos controlar. Este impacto se puede medir en los logs, en la
Pruebas de Rendimiento TIC 39
Anlisis desde la perspectiva del usuario
forma poco comn de anlisis,
mente a grandes pruebas de rendimiento
donde la visin del usuario es fundamental y donde
adems el enfoque del servicio es global; con usuarios
dispersas.
consiste en realizar las pruebas de
miento desde mltiples ubicaciones y sistemas que simulen, de la
forma ms precisa posible, los distintos perfiles de usuario del sistema y sus
La principal ventaja es la capacidad de la prueba para reproducir,
imponga nuestro bolsillo e imaginacin, la realidad del
acceso de usuarios a un aplicativo de uso global.
en consonancia, el coste, la complejidad, la
slo es recomendable para casos muy puntuales
donde se determina que los otros mtodos son insuficientes.
Una visin conjunta: las pruebas de capacidad
Hay una situacin un tanto particular que se da cuando lo que
queremos medir es la capacidad del sistema de informacin (uso de CPU,
estado de un proceso, ...).
En este caso concreto, es obvio que no nos vale slo con la
informacin que podramos obtener desde el exterior del sistema evaluado
que fuese desde la red local, desde la nube o desde mltiples
), sino que adicionalmente necesitamos la visin desde el
No obstante, en esta situacin, lo ms correcto es generar las
desde el exterior del sistema. Y desde el interior, nicamente,
medir el impacto que estamos generando en aquellos parmetros que
Este impacto se puede medir en los logs, en la
40 Entrando en materia | 2
informacin estadstica del sistema o mediante un sistema de
monitorizacin.
Por qu hacerlo as? Bsicamente para limitar el impacto que
causara generar las peticiones desde el propio sistema.
Tabla resumen
Para finalizar este apartado vamos a ver una tabla resumen de las distintas
ubicaciones, sus principales ventajas, inconvenientes y su uso
recomendado.
Ubicacin Ventajas Inconvenientes Recomendado
sistema Sencillez falta de precisin preproduccin
red interna verstil, buena precisin, rcp no visin externa uso comn
nube verstil, buena precisin, visin externa coste y tiempo visin externa
usuario excelencia / precisin complejo, coste, tiempo casos puntuales
TABLA 2-1
Pruebas de Rendimiento TIC 41
2.3 | MEDIDAS Y MTRICAS
Hasta ahora hemos visto tipos de pruebas y tambin perspectivas
de ejecucin de las pruebas, y aunque hemos nombrado algunas medidas y
algunas mtricas, e incluso hemos pintado grficos en las que se pueden ver
reflejadas, hemos pasado un poco por encima de ellas.
No tiene sentido retrasarlo mucho ms, as que en este apartado
vamos a hablar de qu parmetros, medidas y mtricas, son los que
comnmente nos sirven para evaluar una prueba de rendimiento.
Medidas vs. Mtricas
Muchas veces usamos ambas palabras de forma indistinta,
solapamos sus significados sin darnos mucha cuenta de ello, y termina
resultando que una medida y una mtrica son lo mismo. Sin embargo, no lo
son.
Una medida, del ingls measure, consiste en la obtencin de un
parmetro concreto y cuantitativo.
EJEMPLO 2-6
Medidas son: tiempo de respuesta, nmero de errores o uso de
disco.
Sin embargo, una mtrica es el resultado de utilizar una o varias
medidas, dotarlas de un contexto y evaluar su evolucin, de tal forma que
se pueda obtener informacin til (valor) a partir de ellas.
EJEMPLO 2-7
Una mtrica es: Tiempo medio de respuesta por nmero de
usuarios. Mtrica que se construye a partir de las medidas
tiempo de respuesta y nmero de usuarios.
42 Entrando en materia | 2
EJEMPLO 2-8
El siguiente grfico muestra la diferencia entre una mtrica y una
medida. La mtrica "tiempo medio de respuesta segn nmero de
usuarios concurrentes" refleja el valor compuesto por la media de
todos los tiempos de respuesta obtenidos durante la prueba segn
el nmero de usuarios. Mientras que nmero de errores es slo una
medida.
La informacin til que aporta la mtrica es superior a la que aporta
la medida y es ms difcil de distorsionar. Una medida como errores
puede distorsionarse rpidamente con que, por un motivo
cualquiera, un slo usuario sufra un problema.
Medidas externas
Este conjunto de medidas son aquellas que podemos obtener,
como su propio nombre indica, desde el exterior del sistema evaluado.
Las ms importantes son:
Tiempo de respuesta (ms): Nmero de milisegundos
que el sistema tarda en contestar una peticin.
0
50
100
150
200
250
300
20 25 30 25 40
V
a
l
o
r
e
s
Usuarios concurrentes
Ejemplo 2-8 | Medida vs. Mtrica
Tiempo medio(s)
Errores
Pruebas de Rendimiento TIC 43
Errores (n o %): Nmero de errores que obtengo al
realizar un nmero determinado de peticiones al
sistema.
Usuarios y peticiones (n): Nmero de usuarios
realizando un nmero total de peticiones.
Fundamental para el clculo de rendimiento.
Existen otras, secundarias como son:
Latencia de red (ms): Nmero de milisegundos que el
sistema tarda en recibir y devolver la informacin.
Tiempo de procesamiento (ms): Nmero de
milisegundos que el sistema pasa procesando la
informacin. Aprox. Tiempo de respuesta - Latencia.
Medidas internas
Este conjunto de medidas son aquellas que para obtenerlas,
necesitamos extraer informacin del sistema evaluado, siendo imposible
acceder a ellas desde el exterior.
Las medidas internas est relacionadas con las pruebas de
capacidad y existen tantas, y tan variadas, como elementos contenga el
sistema de informacin a evaluar. Las ms comunes son las siguientes:
Uso de recursos del sistema (CPU, memoria, disco, ...):
Cantidad de un determinado recurso consumida globalmente
por el sistema durante la prueba de capacidad.
Uso de recursos de un determinado proceso (CPU, memoria,
disco, sockets abiertos, ...): Cantidad de un determinado
recurso consumida por un proceso concreto.
Informacin contenida en logs: Informacin que el sistema, o
un determinado proceso, registran en ficheros de logs.
44 Entrando en materia | 2
Informacin del sistema de monitorizacin: Conjunto de
parmetros del sistema o de los procesos controlados
automticamente por el sistema de monitorizacin y que
permiten medir el uso de recursos internos de un sistema.
OBSERVACIN 2-1. Medida vs. Perspectiva.
Es importante distinguir entre medidas y perspectivas de
evaluacin. La perspectiva de evaluacin indica el lugar desde el
que se generan las peticiones (sistema, red, nube, ...). Mientras que
la medida, bien sea externa o interna, indica en base a qu
obtenemos la informacin.
Muy importante que tengamos claro que una perspectiva de
evaluacin desde red (o desde la nube) puede contener medidas
internas.
Construyendo mtricas
La construccin de mtricas tiles es una tarea bsica de la fase de
planificacin y diseo de una prueba de rendimiento. Se pueden construir
mtricas tan sencillas como usar una medida (recordemos el ejemplo de
errores) o tan complicadas como nuestra imaginacin nos lo permita.
Sin embargo, el objetivo de una mtrica no es ser ni sencilla, ni
complicada, sino facilitarnos una informacin que nos sea relevante. No
obstante, cuanta ms informacin queramos que contenga una mtrica,
ms medidas necesitar y, a la vez, ms globalizar el resultado.
Si nos contentamos con una mtrica que sea tiempo medio de
respuesta por sistema podremos construir la mtrica con la informacin que
recogemos de un nico sistema. En cambio, si queremos una mtrica que
sea tiempo medio de respuesta de los servicios web pblicos necesitaremos
realizar pruebas de rendimiento, equivalentes, en todos los sistemas
implicados y luego obtener la mtrica.
Las mtricas ms usuales son las medias, las medianas y las
variaciones sobre un conjunto de medidas, internas o externas, sobre las
Pruebas de Rendimiento TIC 45
que se realiza un determinado filtro o agrupacin. De tal forma podramos
tener las siguientes mtricas iniciales ms comunes:
Nmero de peticiones atendidas por unidad de tiempo (n/t)
Tiempo medio de respuesta (ms)
Mediana del tiempo de respuesta (ms)
Variacin media del tiempo respuesta (ms)
Nmero medio de errores (n)
Mediana del nmero de errores (n)
Variacin media del nmero de errores (n)
Uso medio de recursos de sistema (CPU, memoria, ...)
Mediana del uso de recursos de sistema (CPU, memoria, ...)
Variacin media del uso de recursos de sistema (CPU, memoria,
...)
...
Sobre estas mtricas iniciales se establecen una serie de filtros o
agrupaciones; los ms usuales son los siguientes:
Por sistema: El filtro ms inmediato y sencillo es agrupar los
datos por sistema evaluado.
Por nmero de usuarios: El segundo filtro ms comn es
agrupar los datos en funcin de nmero de usuarios que se han
utilizado en la prueba de rendimiento.
Por fechas y horas: Esta agrupacin requiere repetir las mismas
pruebas en distintas horas ( o das ).
Por servicio: Esta agrupacin requiere realizar las mismas
pruebas para todos los elementos frontales de un servicio.
Y as podramos seguir durante pginas y pginas, mientras nuestra
imaginacin lo permitiese... pero no parece que sea necesario.
46 Entrando en materia | 2
2.4 | EVALUACIN DE ARQUITECTURAS MULTICAPA
La evolucin hacia sistemas cuya interaccin con el usuario es
"100% web" avanza imparable, con pequeas excepciones
electrnico. Esto hace que las arquitecturas IT
adecen a esa realidad. El diagrama
aspecto de un sistema IT actual de cara a sus usuarios.
A efectos de evaluacin de rendimiento, podemos
frontales web se concentra el grueso del trfico proveniente del usuario
canalizado a travs de la red de acceso,
informacin: servidores de aplicacin, bases de datos, otros servicios IP
(correo electrnico, autenticacin, firma digital, servidores de ficheros, ...);
as como, en caso de existir, a la red de almacenamiento.
CTURAS MULTICAPA
temas cuya interaccin con el usuario es
pequeas excepciones como el correo
electrnico. Esto hace que las arquitecturas IT, y la forma de evaluarlas, se
El diagrama de la [Figura 2.1] intenta mostrar el
aspecto de un sistema IT actual de cara a sus usuarios.
A efectos de evaluacin de rendimiento, podemos ver que en los
se concentra el grueso del trfico proveniente del usuario,
canalizado a travs de la red de acceso, y cmo se reparte por el sistema de
informacin: servidores de aplicacin, bases de datos, otros servicios IP
(correo electrnico, autenticacin, firma digital, servidores de ficheros, ...);
como, en caso de existir, a la red de almacenamiento.
Pruebas de Rendimiento TIC 47
Este tipo de arquitectura hace que, a da de hoy, un nmero muy
elevado de las evaluaciones de rendimiento se realice exclusivamente sobre
servicios y aplicativos web, y a partir de ellos se evale la totalidad del
rendimiento del sistema:
Rendimiento de red: Entendido como la adecuacin de la
red al volumen de peticiones generadas en la evaluacin.
Las tcnicas ms comunes son la comparacin entre la
latencia y el tiempo de procesamiento, as como las
medidas de capacidad de los elementos de red.
Rendimiento de servicio web: Evaluados directamente a
partir del trfico enviado a ellos por los scripts de
evaluacin.
Rendimiento de elementos interconectados a los servicios
web: El rendimiento de bases de datos, servidores de
aplicacin o de servicios de red IP, se mide en este caso en
base a la peticiones en cascada que se generan a partir de
las realizadas al servicio web.
No obstante, aunque es cierto que la arquitectura multicapa nos
permite este tipo de evaluacin, no podemos dejar de atender a las dos
observaciones que haremos a continuacin; dado que condicionan por
completo los resultados que obtendremos.
OBSERVACIN 2-2. Medidas globales vs. especficas.
Al evaluar una arquitectura multicapa podemos optar por una
medida global de rendimiento o no hacerlo.
Un ejemplo de medida global es el tiempo de respuesta a una
peticin. Una nica medida que engloba el rendimiento de todo el
sistema de informacin.
48 Entrando en materia | 2
Sin embargo, esta medida puede ser insuficiente. En ese caso se
debe optar por evaluar el rendimiento de los elementos que
interactan para atender al usuario.
La forma ms frecuente y usual de evaluar el rendimiento es
mediante el uso de medidas de capacidad (CPU, memoria,
procesos, ...) para cada elemento que interconecta con el servicio
web sobre el que se ejecuta la prueba; para ello es muy til
disponer de monitorizacin en los sistemas evaluados.
Los resultados de ambas opciones, es obvio, son distintos. En la
primera opcin tendremos un nico valor que daremos por bueno,
o no, en funcin del contexto. En la segunda opcin vamos a ser
capaces de discernir qu elementos puntuales son los que estn
impactando negativamente en el rendimiento.
OBSERVACIN 2-3. Evaluacin de arquitecturas complejas.
Esta observacin es fundamental en la evaluacin de arquitecturas
complejas. Al evaluar una arquitectura de cierta envergadura, sera
muy extrao disponer de elementos independientes para cada uno
de los servicios web que la componen. Lo habitual es que bastantes
elementos sean compartidos entre distintos servicios web.
En estos casos, evaluar un nico servicio web, obvia o sesga el
impacto en el rendimiento del resto de servicios web que
comparten arquitectura; teniendo una utilidad limitada a la
deteccin de errores en el propio servicio evaluado (gestin
incorrecta de conexiones (bbdd, ldap,...), condiciones de carrera,
liberacin incorrecta de recursos, ...)
Este sesgo se magnifica en elementos que atienden a todos los
servicios del sistema de informacin: correo electrnico, servicio
LDAP, ...
Ganando precisin en la evaluacin de
Cuando nos encontramos una arquitectura multicapa que se
corresponde 1:1 con un servicio, es decir, cuando la red de acceso, los
servidores web, de aplicacin, de bases de datos y cualesquiera otros,
nicamente atienden a un servicio, la evaluacin a travs del frontal web
tiene una precisin suficiente y adecuada
Sin embargo, como hemos visto en la
momento que la relacin deja de ser 1:1 y pasa a ser N:1, varios servicios
comparten una infraestructura comn,
hora de evaluar el rendimiento.
Por tanto, vamos a ver qu posibilidades tenemos para afinar la
evaluacin del rendimiento.
Anlisis de servicios web con dependencias comunes
Esta aproximacin es til pa
servicios web que comparten arquitectura no es muy elevado.
sencilla: extender el anlisis de rendimiento a todos los servicios web que
comparten la arquitectura multicapa.
La principal ventaja
de esta aproximacin es la
homogeneidad de la prueba,
puesto que toda ella se
realizar haciendo uso de las
mismas herramientas y del
mismo protocolo de
comunicacin (HTTP/HTTPS).
El inconveniente se
produce en redes con gran
cantidad de servicios web y
una infraestructura
compartida.
Pruebas de Rendimiento TIC 49
valuacin de arquitecturas multicapa
Cuando nos encontramos una arquitectura multicapa que se
corresponde 1:1 con un servicio, es decir, cuando la red de acceso, los
servidores web, de aplicacin, de bases de datos y cualesquiera otros,
n a un servicio, la evaluacin a travs del frontal web
y adecuada.
Sin embargo, como hemos visto en la Observacin 2-3, en el
momento que la relacin deja de ser 1:1 y pasa a ser N:1, varios servicios
ructura comn, surgen problemas de precisin a la
Por tanto, vamos a ver qu posibilidades tenemos para afinar la
con dependencias comunes
Esta aproximacin es til para casos en los que el nmero de
que comparten arquitectura no es muy elevado. La idea es
extender el anlisis de rendimiento a todos los servicios web que
comparten la arquitectura multicapa.
50 Entrando en materia | 2
Anlisis de infraestructura compartida no web
La segunda forma de ganar precisin en la evaluacin de
arquitecturas multicapa es adecuada para aquellos casos en la que la
evaluacin de servicios web implicara analizar un gran nmero de ellos (o
todos), haciendo intil la aproximacin anterior o para aquellos servicios no
web masivos (p.ej. correo electrnico).
En esta alternativa, debemos evaluar, independientemente, cada
uno de los elementos de la infraestructura compartida, valorando el
rendimiento de cada uno de ellos y obteniendo como medidas de todo el
sistema las peores de los elementos comunes.
El principal problema es la prdida de homogeneidad: cada
elemento hablar un protocolo distinto (HTTP, SQL, SMTP, POP, CIFS, ...)
que nos obligar a usar diferentes herramientas.
Tabla Resumen
Para finalizar adjuntamos una tabla resumen que recoge las
distintas posibilidades de anlisis y las recomendaciones de uso de las
mismas.
Anlisis ptimo Adecuada Problema
Web nico Eval. 1:1 Deteccin Errores Eval. N:1
Web Comn Eval. N:1; N<=3 Eval. N:1; N>3 Nmero de servicios
No Web Eval. N:1; N>3 Eval. N:1; N<=3 Protocolos
TABLA 2-2
Servidores Aplicacin Servidores Bases Datos Otros servicios IP
Pruebas de Rendimiento TIC 51
2.5 | ANLISIS COMPARATIVO: PERFILES "BASE".
Un "perfil base", en ingls baseline, por muy rimbombante que nos
pueda sonar el nombre, no es ms que un tipo de mtrica muy particular, y
relativamente sencilla, que sirve para realizar anlisis comparativo del
rendimiento
Empecemos por el principio. Cuando hacemos una nica prueba de
rendimiento, o una primera prueba, nuestros criterios de aceptacin o
rechazo del rendimiento se van a basar en lo siguiente:
Caso de mtricas externas: Las aceptaremos en base a criterios
cualitativos de calidad de servicio. P.ej: Creemos aceptable que
un servicio web tenga un tiempo medio de respuesta de
500ms.
Caso de mtricas internas: Las aceptaremos en base a criterios
cuantitativos lmite. P.ej. Aceptaremos que se consuma hasta el
85% de un determinado recurso: memoria, disco, CPU...
Sin embargo, una vez que hemos aceptado, en base a las mtricas
que hemos obtenido, la prueba de rendimiento, hemos creado (quiz sin
pretenderlo) lo que se conoce como un "perfil base".
Es decir, tenemos un marco de referencia de mtricas de
rendimiento (tiempo de respuesta, errores, usuarios concurrentes,
capacidad, ...) que podemos utilizar para realizar anlisis comparativo.
Un "perfil base" es por tanto una mtrica que se compone de todas
las mtricas que han formado la prueba de rendimiento realizada y que
tiene la caracterstica de ser esttica en el tiempo. Es decir, los valores del
"perfil base" son siempre los mismos hasta que se decida su actualizacin.
52 Entrando en materia | 2
"Perfiles Base": Ciclo de Vida
En la [Figura 2.3] podemos ver cul es el ciclo de vida de un "Perfil
Base".
Prueba de Rendimiento Inicial: Prueba de rendimiento que se
realiza sin que exista ningn "perfil base" sobre el que realizar
anlisis comparativo.
Aceptacin de Mtricas: Conjunto de criterios cualitativos y
cuantitativos que aplicamos a una prueba de rendimiento
inicial para determinar si es aceptada.
Obtencin del Perfil Base: Conjunto de mtricas que han
resultado aceptadas en la prueba de rendimiento inicial.
Anlisis Comparativo: Comparacin de valores obtenidos en
una nueva prueba de rendimiento con los del "perfil base".
Actualizacin del Perfil: Actualizacin de los valores usados
como mtricas en el "perfil base".
Prueba
Rendimiento
Inicial
Aceptacin de
Mtricas
Obtencin de
"Perfil Base"
Anlisis
Comparativo
Actualizacin
de "Perfil"
Figura 2.3
Pruebas de Rendimiento TIC 53
Anlisis comparativo: El error ms comn.
El anlisis consiste en algo que, a priori, parece sencillo: comparar
un "perfil base" creado sobre un conjunto de elementos N1 en un momento
del tiempo T1, con las mismas mtricas extradas en un momento del
tiempo T2 sobre un conjunto de elementos N2.
Sin embargo, hay algo que es fundamental para que todo esto sirva
de algo: los elementos de N1 y N2 nicamente pueden diferir en aquellos
sobre los que queremos obtener comparacin.
Es decir, si estamos haciendo una prueba de rendimiento de un
aplicativo web W1, sobre el que tenamos un "perfil base" para su versin
2014.01 y queremos comparar el rendimiento con la nueva versin 2014.02;
debemos garantizar que el resto de elementos son los mismos: servidor
web, servidor de aplicacin, servidor de bases de datos, etc. La
correspondencia tambin se aplica en sentido contrario, si queremos ver
cmo los cambios en la infraestructura IT afectan al rendimiento del
aplicativo web, debemos hacerlo sobre la misma versin del servicio.
En el momento que uno de estos elementos haya cambiado, el
anlisis comparativo perder precisin. Cunta? Pues depende lo
significativos que sean los cambios. Si, por ejemplo, el cambio es que hemos
pasado de la versin de Apache 2.2.24 a 2.2.25, puede ser que
"despreciable". En cambio, si el cambio consiste en pasar de la versin 2.2
de Apache, a la versin 2.4 el cambio puede ser bastante significativo, y por
tanto el "perfil base" no tener ningn valor.
Casos de utilidad de "perfiles base"
Una vez que sabemos qu son, vamos a ver para qu podemos
usarlos realmente.
Comparar versiones del mismo servicio: Si hemos creado un
"perfil base" para un servicio, podemos comparar (mientras lo
evaluemos en la misma infraestructura) diferentes versiones
del mismo servicio y si el rendimiento mejora o empeora.
54 Entrando en materia | 2
Comparar el rendimiento de cambios en la infraestructura IT:
Si hemos creado un "perfil base" para un servicio, podemos
comparar (mientras evaluemos la misma versin del servicio)
diferentes cambios en la infraestructura: nuevas versiones de
base de datos, nuevas versiones de servidor de aplicacin,
nuevos productos sustitutivos, ...
Comparar entre mltiples servicios: Un "perfil base" no tiene
porqu ser usado siempre sobre el mismo servicio. Ni tampoco
provenir de un nico servicio. Si tenemos un servicio S1 y
conjunto de servicios S2,S3... independientes
2
; podemos usar
el mismo "perfil base" siempre que queramos que todos
servicios homogenicen su rendimiento. Es ms, el "perfil base"
puede provenir de la primera prueba de rendimiento realizada
a S1; o de la unin de varias de ellas.
OBSERVACIN 2-4. Perfiles base demasiado genricos.
Un error en el que se puede caer a la hora de construir y utilizar
perfiles base es en hacerlos excesivamente "genricos" de tal forma
que al final no signifiquen nada.
No hay nada de errneo en usar un perfil base para varios servicios
que, de manera lgica, deben tener un rendimiento similar. Sin
embargo, a poco que tengamos un sistema complejo, no tiene
ningn sentido intentar aplicar un nico "perfil base" a todo el
sistema de informacin. Cunto generalizar? Hay que aplicar el
sentido comn.
2
Ver Observacin 2-3. La problemtica que encontraremos en arquitecturas compartidas ser la
misma.
EJEMPLO 2-9
A continuacin, vamos a ver el uso de un "perfil base" muy sencillo
slo incluye el tiempo medio de respuesta,
rendimiento de la evolucin de un aplicativo web
diferentes versiones.
Actualizar el "perfil base"
Este es el ltimo punto del ciclo de vida de un "perfil base": su
actualizacin.
Puesto que aunque un perfil base tiene un valor "esttico" en el
tiempo, llega un momento donde ese valor no significa absolutamente nada
debido a que la evolucin del sistema, o del aplicativo.
Por tanto, la actualizacin del "perfil base" es la decisin, podemos
decir estratgica, de "sustituir" el valor de las mtricas que lo componen
cuando estimamos que nuevos valores se adecan mejor a la realidad.
Pruebas de Rendimiento TIC 55
A continuacin, vamos a ver el uso de un "perfil base" muy sencillo,
slo incluye el tiempo medio de respuesta, para valorar el
la evolucin de un aplicativo web entre sus
Este es el ltimo punto del ciclo de vida de un "perfil base": su
Puesto que aunque un perfil base tiene un valor "esttico" en el
tiempo, llega un momento donde ese valor no significa absolutamente nada
sistema, o del aplicativo.
Por tanto, la actualizacin del "perfil base" es la decisin, podemos
decir estratgica, de "sustituir" el valor de las mtricas que lo componen
cuando estimamos que nuevos valores se adecan mejor a la realidad.
56 Entrando en materia | 2
2.6 | USUARIOS: GLOBALES, DEL SERVICIO, POR MES/DA/HORA,
ACTIVOS VS. SIMULTNEOS VS. CONCURRENTES...
Como ltimo punto de este captulo, ya bastante extenso, vamos a
tratar el aspecto del nmero de usuarios. Al hablar de usuarios, pasa algo
similar como con los tipos de pruebas y tendemos a mezclar conceptos. Por
eso vamos a intentar aclarar los tipos de usuarios que principalmente
encontramos cuando hacemos una prueba de rendimiento y su papel en
ellas.
Usuarios globales
El primer tipo de usuario son los usuarios globales, es decir, el
nmero de usuarios de nuestro sistema de informacin.
Sin embargo, a efectos de ejecutar pruebas de rendimiento, al
menos en este libro, siempre vamos a hablar a nivel de servicios y de
usuarios del servicio, por lo que podemos olvidarnos de ellos. En todo caso,
si slo tenemos un servicio, o si hablamos de un servicio usado por todos los
usuarios, ambas cifras coincidirn. En caso contrario, no.
Usuarios del servicio
Como su nombre indica es el nmero total de usuarios de un
servicio. Este tipo de usuario, de cara a una prueba de rendimiento tiene
especial significancia para valoracin de medidas de capacidad de
persistentes: quotas de disco, buzones de correo, tablas de base de datos,
etc.
Sin embargo, su importancia, es escasa en la valoracin del resto de
medidas que no presentan persistencia en el sistema cuando no existe
actividad: uso de CPU, memoria, red, tiempo de respuesta, etc. Para las que
usaremos usuarios por mes/da/hora.
Pruebas de Rendimiento TIC 57
Cmo obtener su nmero?
Los usuarios del servicio nos interesan cuando hay persistencia de
informacin en el sistema. Esta persistencia, por fortuna para simplicidad de
nuestros clculos, en la amplia mayora de los casos va a estar ligada a
usuarios registrados. Por tanto, en la amplia mayora de los servicios, a
nuestros efectos, el dato que queremos conocer son los usuarios
registrados.
En el caso de tratarse de un servicio pblico con persistencia de
informacin (p.ej. administracin electrnica a ciudadanos, almacenaje de
ficheros annimo, ...) deberemos usar como usuarios del servicio una
estimacin a partir de los usuarios mensuales.
Usuarios por mes/da/hora
Esta triada de valores, obtenidos generalmente unos a partir de
otros, es la que nos servir, como veremos en el captulo 4, para establecer
nuestras estimaciones de nmero de usuarios concurrentes que
necesitamos simular en nuestras pruebas de rendimiento.
Cmo obtener su nmero?
Para esta labor necesitaremos bien procesar los logs por nosotros
mismos. Bien un generador de estadsticas a partir de logs ( p.ej. AWStats )
que nos muestre una informacin similar a la siguiente.
Mes Nmero de visitas Pginas Solicitudes
Ene 2014 1,120 4,517 25,078
Feb 2014 1,222 5,119 26,833
Mar 2014 1,610 5,107 27,152
Abr 2014 1,452 5,540 20,400
TABLA 2-3
58 Entrando en materia | 2
Usuarios activos vs. simultneos vs. concurrentes
Este es posiblemente uno de los conceptos que ms malos
entendidos causa a la hora de realizar pruebas de rendimiento. Vamos a
intentar aclararlo.
Un usuario activo es aquel que tiene una sesin abierta en el
servicio, independientemente de que tenga actividad o no la tenga en ese
momento. Cada una de estas sesiones, podemos presuponer que se
corresponde con una visita.
Los usuarios simultneos son aquellos que, en el mismo momento
del tiempo, estn generando actividad en el servicio realizando una accin
cualquiera. Debemos pensar que difcilmente en servicios interactivos
vamos a tener ratios 1:1, es decir, difcilmente por cada usuario activo
vamos a tener un usuario simultneo.
Por ltimo, los usuarios concurrentes son aquellos que,
exactamente en el mismo momento del tiempo, estn realizando
exactamente la misma accin en el servicio. Nuevamente tendremos que el
ratio usuario simultneo respecto concurrente muy extraamente va a ser
1:1. De hecho, salvo que se trate de una prueba de rendimiento, es muy
improbable que suceda.
En el captulo 4, dedicado a la planificacin de las pruebas de
rendimiento, profundizaremos ms en este concepto, y analizaremos con
exactitud qu es lo que nos interesa simular en nuestras pruebas y cul es la
mejor forma de simularlo.
EJEMPLO 2-10
En la siguiente tabla podemos ver una simulacin de trfico en un
servicio, que muestra las diferencias entre
simultneos (2) y concurrente
SESS\MSEC 10ms 20ms 30ms
Sesin 1 Login
Sesin 2
Login
Sesin 3
Sesin 4
Ver
Sesin 5
Buscar
Sesin 6
Perfil
Sesin 7
Sesin 8 Perfil
TABLA
Para terminar vamos a generar un
que ilustra la posible transmisin de informacin y las diferencias
entre activo y simultneo.
Pruebas de Rendimiento TIC 59
En la siguiente tabla podemos ver una simulacin de trfico en un
las diferencias entre usuarios activos (8),
concurrentes (2).
ms 40ms 50ms 60ms 70ms 80ms 90ms
Perfil
Salir
Perfil
Buscar
Ver
Buscar
Salir
Ver
Buscar
Ver
Buscar Ver
Buscar
Ver
ABLA 2-4
generar un grfico, a partir de la [Tabla 2.4],
que ilustra la posible transmisin de informacin y las diferencias
60 Entrando en materia | 2
Pruebas de Rendimiento TIC 61
HERRAMIENTAS | 3
Un captulo ms, y si en el nmero dos hemos entrado en materia,
en este nmero tres toca arremangarse para, definitivamente, meternos en
faena. Hablar de herramientas, una vez que ms o menos hemos empezado
a entender de qu va esto de hacer pruebas de rendimiento, es necesario
para que conozcamos qu hay a nuestra disposicin para hacerlas. Y sin
embargo, es algo que prcticamente todos los libros dedicados a esta
materia evitan.
Por qu? La excusa suele ser porque las herramientas cambian, o
porque cada uno ejecuta la tarea con la que ms cmodo se siente, o
porque lo importante es tener claros los conceptos. A este paso alguien dir
que ha sido porque el perro se comi esas pginas.
El hecho es que da igual por qu el resto de libros no tengan un
captulo dedicado a este tema, salvo aquellos libros que especficamente se
centran en una nica herramienta. Pero con nuestro objetivo en mente,
escribir este captulo es fundamental para que alguien que nunca ha hecho
una prueba de rendimiento tenga una idea general de por dnde van los
tiros y qu funcionalidades tienen las herramientas. Si dentro de 10 aos las
herramientas han cambiado, ya veremos si hacemos una versin 2.0 de este
libro o si dejamos que cada uno se espabile por su cuenta. Pero, de
momento, vamos a preocuparnos del presente. Empecemos. Qu veremos
en este captulo?
Rendimiento Web: las herramientas clsicas. Apache Benchmark,
HTTPerf y AutoBench. El tro bsico de herramientas para hacer
pruebas simples a arquitecturas HTTP y HTTPS. En uso desde hace
ms de una dcada, y con capacidad para ayudarnos en
determinados momentos.
62 Herramientas | 3
Rendimiento No Web: herramientas especficas
visto que hay situaciones en las que deberemos realizar pruebas de
rendimiento en servicios no web,
herramientas especficamente diseadas para
correo electrnico, red, bases de datos ...
JMeter: La navaja suiza. JMeter es la referencia
hora de ejecutar pruebas de rendimiento
herramienta a la que debemos acostumbrarnos
para una prueba de carga a un servicio HTTP, que para una prueba
de stress a un servidor LDAP.
prueba desde un entorno GUI, y adems la simulacin de
situaciones cercanas a las reales
navegacin reales con un proxy incorporado, dispersin de eventos
con temporizadores, inclusin de lgica en la
Frameworks: scripting para gente elegante.
de soluciones como JMeter,
relativamente complicadas no era ninguna locura programarse
mediante algn lenguaje de scripting (p.ej. perl) algunas pruebas de
rendimiento "ex-profeso". Los frameworks son herederos de
aquella idea y nos ofrecen APIs con mu
mediante el uso de lenguajes modernos (clojure, phyton, groovy,
...) permiten realizar pruebas de rendimiento totalmente
customizadas a nuestras necesidades.
herramientas especficas. Como hemos
visto que hay situaciones en las que deberemos realizar pruebas de
rendimiento en servicios no web, analizaremos algunas
herramientas especficamente diseadas para servicios no web:
, bases de datos ...
JMeter es la referencia opensource a la
de rendimiento, con lo cual es una
a la que debemos acostumbrarnos. Lo mismo sirve
para una prueba de carga a un servicio HTTP, que para una prueba
de stress a un servidor LDAP. Permite un cmodo diseo de la
prueba desde un entorno GUI, y adems la simulacin de
reales mediante captura de sesiones de
navegacin reales con un proxy incorporado, dispersin de eventos
con temporizadores, inclusin de lgica en la prueba...
Frameworks: scripting para gente elegante. Antes de la existencia
de soluciones como JMeter, para la realizacin de pruebas
relativamente complicadas no era ninguna locura programarse
mediante algn lenguaje de scripting (p.ej. perl) algunas pruebas de
profeso". Los frameworks son herederos de
aquella idea y nos ofrecen APIs con multitud de funciones que
mediante el uso de lenguajes modernos (clojure, phyton, groovy,
...) permiten realizar pruebas de rendimiento totalmente
customizadas a nuestras necesidades.
Pruebas de Rendimiento TIC 63
3.1 | RENDIMIENTO WEB: LAS HERRAMIENTAS CLSICAS
Tienen en comn ser las herramientas bsicas y elementales para
medir rendimiento de servicios y aplicativos web. Sus seas de identidad
son: interfaz en lnea de comandos, funcionalidades espartanas y una curva
de aprendizaje casi nula.
Conexiones vs. Sesiones
Antes de empezar a hablar de las herramientas propiamente
dichas, vamos a tratar un aspecto importante que afecta a todas las
herramientas de anlisis de rendimiento web: la orientacin a conexiones
vs. la orientacin a sesiones.
La orientacin a conexiones fue la primera y por tanto ms bsica
forma de evaluar el rendimiento. La idea no puede ser ms sencilla:
conecto, hago una peticin y desconecto. Tantas veces como sea necesario
hasta que llegue al nmero de peticiones que se me ha indicado.
La aproximacin tiene dos pequeos problemas. El primero de ellos
es que al solicitar una web ligera, que se procesa en unos pocos
milisegundos, el tiempo de reconexin en cada peticin va a penalizar de
forma apreciable.
0
5
10
15
20
25
30
35
M
i
l
i
s
e
g
u
n
d
o
s
Figura 3 - 1 | Comparativa de rendimiento | Contenido Esttico
100 peticiones / 10 usuarios
No KeepAlive
KeepAlive
64 Herramientas | 3
La [figura 3-1] nos muestra un ejemplo de prueba de rendimiento,
realizada en red local, donde 10 usuarios realizan un total de 100 peticiones
(10 por usuario) a un servicio web esttico que sirve un documento de
aproximadamente 1KByte. Podemos ver que la opcin sin Keep-Alive ofrece
un rendimiento significativamente peor.
No obstante, la [figura 3-2] nos muestra como en el momento que
entra en juego un contenido dinmico, donde el tiempo de procesamiento
tiene ms importancia que el tiempo de transmisin, la situacin deja de
tener importancia.
El segundo problema que presenta la orientacin a conexiones es
que nuestros usuarios no se comportan as. Un cliente y un servidor web
modernos mantienen abierta la sesin TCP entre 5 y 15 segundos hasta el
timeout. Lo que hace que un usuario haga toda su sesin de navegacin por
nuestro site con una unas pocas conexiones TCP. Con lo que la congestin a
nivel de capa de transporte siempre va a ser menor.
Para solventar estos inconvenientes, las herramientas
implementan, de forma ms o menos acertada, modos de prueba por
sesin, donde el conjunto de peticiones se integran en una misma conexin
TCP haciendo uso del modo Keep-Alive.
0
50
100
150
200
250
300
350
M
i
l
i
s
e
g
u
n
d
o
s
Figura 3 - 2 | Comparativa de rendimiento | Contenido Dinmico
100 peticiones / 10 usuarios
No KeepAlive
KeepAlive
Pruebas de Rendimiento TIC 65
Apache Benchmark
Apache Benchmark es la herramienta de medicin de rendimiento
que acompaa, por defecto, a las instalaciones de Apache.
$ ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make
-t timelimit Seconds to max. wait for responses
-b windowsize Size of TCP send/receive buffer, in bytes
-p postfile File containing data to POST. Also set -T
-u putfile File containing data to PUT. Also set -T
-T content-type Content-type header for POSTing, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
-H attribute Add header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol (SSL3, TLS1, or ALL)
TABLA 3-1
Sus opciones, aunque al principio puedan parecer muchas, en la
prctica real se limitan fundamentalmente a los parmetros:
Peticiones [-n]: Nmero total de peticiones que queremos
realizar en la prueba.
66 Herramientas | 3
Concurrencia [-c]: Nmero de peticiones que queremos realizar
al mismo tiempo.
Opcin Keep-Alive [-k]: Opcin para mantener el canal de
comunicacin abierto entre peticin y peticin,
reaprovechando el socket abierto mediante el uso de la
cabecera HTTP Keep-Alive.
Guardar la salida [-g] o [-e]: Guardar los resultados. Bien en
formato gnuplot [-g], muy enfocado a dibujar grficos. Bien en
formato CSV [-e], para utilizarlo donde mejor nos venga.
Y nada ms. El resto de opciones sirven principalmente para definir
si queremos hacer algn otro tipo de peticin que no sea GET. P.ej. POST [-
p] o PUT [-u]; controlar opciones de SSL [-Z/-f]. Y por ltimo en caso de que
estemos en una aplicacin autenticada, si queremos aadir alguna cabecera
propia [-H] o una Cookie [-C].
De tal forma, una ejecucin de Apache Benchmark donde
queramos una prueba sobre el sistema localhost que realice 1000
peticiones, con una concurrencia de 10 peticiones simultneas sin cierre del
canal y salvando los datos a csv, sera algo como esto:
$ ab -c10 -n1000 -k -e prueba.localhost.c10.n1000.csv http://127.0.0.1/
TABLA 3-2
Una vez la hemos ejecutado, esperamos unos instantes hasta
obtener el siguiente resultado.
Server Software: Apache/2.2.22
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /
Document Length: 2224 bytes
Concurrency Level: 10
Pruebas de Rendimiento TIC 67
Time taken for tests: 0.136 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2503000 bytes
HTML transferred: 2224000 bytes
Requests per second: 7353.59 [#/sec] (mean)
Time per request: 1.360 [ms] (mean)
Time per request: 0.136 [ms] (mean, across all requests)
Transfer rate: 17974.64 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 0 1 0.6 1 9
Waiting: 0 1 0.5 1 5
Total: 1 1 0.6 1 9
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 2
95% 2
98% 3
99% 5
100% 9 (longest request)
TABLA 3-3
La informacin que nos muestra al terminar es por un lado el
tiempo en el que ha ejecutado la prueba, si han existido errores, una
estimacin media de las peticiones por segundo y del tiempo medio por
peticin (tanto por grupo de concurrencia, como por cada peticin). Por
otro, nos da una estimacin de tiempos de respuesta donde podemos ver el
tiempo de respuesta desde el 50% al 100% de las peticiones.
Y esto es, en esencia, todo lo que hace Apache Benchmark. Es
suficiente? A poco que pensemos, no creo que a nadie se le escape que
Apache Benchmark tiene unas pocas deficiencias.
Algunas tan obvias como no permitir ejecutar pruebas sobre ms
de una URL; lo que al final te obliga a terminar escribiendo pequeos scripts
para hacer pruebas ms extensas.
68 Herramientas | 3
Y otras que no se ven a simple vista, pero que en el momento que
nos familiaricemos con la tarea de hacer pruebas de rendimiento las
veremos muy claras. En este ltimo grupo est el motivo esencial por el que
la herramienta debe ser usada con cierta cautela.
Apache Benchmark no es una herramienta pensada para simular
situaciones reales de pruebas de carga. Su objetivo ms bien es ver cmo de
deprisa somos capaces de hacer una determinada tarea. Con lo cual, cuando
decimos concurrencia 10 y 1000 peticiones, lo que Apache Benchmark hace
es ver cmo de deprisa es capaz de contestar el servidor a eso. De tal forma
que conforme recibe una respuesta, hace otra peticin, una y otra vez, sin
parar, hasta que completa el nmero de peticiones seleccionado.
Problema de esto? No parece que sea una simulacin real.
Si dibujsemos una tabla con la ejecucin de Apache Benchmark
que acabamos de hacer, y cada punto de la tabla fuese una peticin, el
resultado sera el siguiente.
TABLA 3-4
Resultado que no se parece en nada a lo que habamos visto en el
ejemplo 2-10 sobre cmo funcionan los usuarios simultneos de un sistema
de informacin.
Entonces los resultados de Apache Benchmark no sirven de nada?
Si lo que queremos es hacer un modelado preciso de una situacin real de
carga: no. No obstante, no por ello hay que despreciar el valor de la
informacin que obtenemos.
Lo que Apache Benchmark nos est diciendo en esta prueba es que
nuestro servidor web es capaz de atender, en como mucho 9ms, a 10
usuarios que realizasen cada uno 1.000 peticiones por segundo.
HILO\MSEC 10ms 20ms 30ms 40ms 50ms 60ms 70ms 80ms 90ms 100ms
Hilo 1
Hilo 2
Hilo 3
..
Hilo 10
Pruebas de Rendimiento TIC 69
Para qu nos sirve esto? En primer lugar, para saber que 10
usuarios concurrentes no parece que nos vayan a causar ningn problema y
por tanto podemos ver que no tenemos errores que ante un determinado
nmero de usuarios, y peticiones, simultneos rompan el servicio. Slo esto,
ya es algo importante. Cuando una aplicacin web realiza una tarea de
forma incorrecta, o existe algn problema en la arquitectura IT que la
sustenta, hacer una simple prueba con Apache Benchmark y unos cuantos
usuarios concurrentes (p.ej. 16, 32 y 64) nos puede servir para detectar
estos fallos.
Otro aspecto importante para el que nos puede servir Apache
Benchmark es para hacer una comparacin de rendimiento usando la
primera ejecucin como baseline y comparando a partir de esa si el
rendimiento mejora o empeora.
Adems, la informacin de peticiones atendidas por segundo se
puede extrapolar con un margen de error amplio, veremos cmo se hace en
los siguientes captulos, para estimar a partir de los usuarios concurrentes y
el nmero de peticiones por segundo de la prueba, cuntos usuarios
simultneos con una navegacin "real" podran atenderse.
Por ltimo, Apache Benchmark, si deseamos evaluar una prueba de
stress, nos puede servir para generar carga, eso s, sin mucho control.
Por tanto, aunque simplona y poco refinada, es una herramienta a
la que se le puede sacar partido, sobre todo para hacer pruebas rpidas
donde detectar errores y hacer comparaciones de rendimiento.
70 Herramientas | 3
HTTPerf
HTTPerf, sin ser actualmente ninguna maravilla de la funcionalidad,
cuando naci, por el ao 1998, supuso una pequea revolucin entre las
aplicaciones libres y gratuitas. Ofreca caractersticas que permitan simular
el comportamiento de usuarios de forma un poco ms realista al
implementar 4 generadores de carga diferentes.
$ httperf --help
Usage: httperf [-hdvV] [--add-header S] [--burst-length N]
[--client N/N] [--close-with-reset] [--debug N] [--failure-status N]
[--help] [--hog] [--http-version S] [--max-connections N] [--max-piped-
calls N] [--method S] [--no-host-hdr] [--num-calls N] [--num-conns N]
[--session-cookies][--period [d|u|e]T1[,T2]|[v]T1,D1[,T2,D2]...[,Tn,Dn]
[--print-reply [header|body]] [--print-request [header|body]]
[--rate X] [--recv-buffer N] [--retry-on-failure] [--send-buffer N]
[--server S] [--server-name S] [--port N] [--uri S] [--ssl]
[--ssl-ciphers L] [--ssl-no-reuse] [--think-timeout X] [--timeout X]
[--verbose] [--version] [--wlog y|n,file] [--wsess N,N,X]
[--wsesslog N,X,file] [--wset N,X] [--use-timer-cache]
TABLA 3-5
Por ello, vamos a ver cada una de las formas que HTTPerf tiene de
generar carga y cmo influyen en su comportamiento.
Carga bsica orientada a conexiones: El modo de trabajo ms
bsico. Funciona generando un nmero fijo de conexiones cada
segundo, determinado por un valor rate hasta completar el
nmero total de conexiones pedido en la prueba num-conns.
Adicionalmente se puede solicitar que en cada conexin se
genere ms de una peticin haciendo uso de la opcin num-
calls. Hay una observacin importante que hacer sobre esto: el
nmero fijo de conexiones por segundo no implica
concurrencia. Si a HTTPerf se le solicitan un ratio de 10 conn/s,
HTTPerf calcula que tiene 100ms para hacer cada conexin sin
modo Keep-Alive. Si hace la primera y ve que tarda 20ms, no va
a establecer ningn tipo de concurrencia. nicamente
generara concurrencia, en este caso, cuando las peticiones
consumiesen ms de 100ms.
Pruebas de Rendimiento TIC 71
Carga mltiple orientada a conexiones: Mediante la opcin
wlog HTTPerf puede leer las URIs a solicitar desde un fichero
con formato separado por '\0' (null-terminated) para cada URI.
El funcionamiento es anlogo a la orientacin a conexiones,
con la diferencia que en cada conexin leer una URI del
fichero. Permite repetir la lectura del fichero cuando se llega a
su final.
Carga bsica orientada a sesiones: La orientacin bsica a
sesiones, accesible mediante la opcin wsess, permite simular
comportamientos de usuario donde se alternan peticiones en
rfaga con tiempos de descanso. Concretamente podemos
definir el nmero de sesiones que queremos crear en total,
cuntas queremos crear por segundo, el nmero de peticiones
totales que queremos hacer en cada sesin, el nmero de
peticiones que se harn en cada rfaga y el tiempo de descaso
entre cada rfaga.
Carga mltiple orientada a sesiones: Mediante la opcin
wsesslog se nos ofrece la posibilidad de configurar un fichero
de peticiones que puede contener ms de un tipo de sesin y
en cada una de ellas los ficheros que se piden por rfaga. La
tabla inferior ejemplifica cmo se podran disear dos sesiones:
un login y una bsqueda. Se incluyen los ficheros adicionales
(png,...) que se piden en la rfaga y una espera de 1 o 2
segundos entre las peticiones a los ficheros php.
# Sesion 1
/index.php think=2.0
/img1.png
/style.css
/script.js
/login.php method=POST contents='user=admin&passwd=1234'
/admin/admin.css
/admin/admin.js
# Sesion 2
/search.php method=POST contents="text=asus" think=1.0
/view.php?id=AS1298 method=GET
TABLA 3-6
72 Herramientas | 3
EJEMPLO 3-1: Uso de HTTPerf
Para aclarar lo mximo posible el uso de HTTPerf vamos a buscar un
ejemplo por cada modo de generacin de carga.
Vamos a empezar con un ejemplo de carga bsica orientada a
conexiones. En este caso vamos a generar un nmero total de 100
conexiones a un ratio de 10 conexiones por segundo en las que hace 1
peticin por conexin. Adems de eso hemos definido el servidor y la URL,
junto con un parmetro un tanto especial: el parmetro hog. Este
parmetro se debe usar siempre que queramos hacer pruebas de
rendimiento en las que pueda ser necesario crear ms de unas pocas miles
de conexiones para evitar problemas en el uso de puertos.
$ httperf --hog --num-conns=100 --rate=10 --num-calls=1
--server=127.0.0.1 --uri /
TABLA 3-7
El siguiente ejemplo usaremos la modalidad de carga mltiple
orientada a conexiones. La principal diferencia con la anterior es el uso de
un fichero (importante insistir que cada URI est separada por el carcter
null, es decir, '\0') que contiene la lista de URI a las que conectar haciendo
uso de la opcin wlog. Adems del fichero, wlog, incluye un primer campo
booleano. Si lo seleccionamos a no, "n", no repetir la lectura del fichero,
por lo que el fichero deber contener tantas lneas como conexiones
queramos hacer o en caso contrario finalizar. Si lo seleccionamos a s, "y",
leer el fichero tantas veces como sea necesario hasta completar el nmero
de conexiones.
$ cat -v lognull.txt
/sysinfo/gfx/treeTable/tv-
expandable.gif^@/sysinfo/gfx/treeTable/blank.gif^@/sysinfo/gfx/sort_asc.pn
g^@/sysinfo/gfx/sort_both.png^@/sysinfo/templates/aqua.css^@/sysinfo/templ
ates/aqua/aq_background.gif^@/sysinfo/templates/two.css^@/sysinfo/template
s/two/gradient.png^@/sysinfo/language/language.php?lang=es^@
$ httperf --hog --num-conns=100 --rate=10 --num-calls=1
--server=127.0.0.1 --wlog=y,lognull.txt
Pruebas de Rendimiento TIC 73
El tercer ejemplo ser el uso de carga bsica orientada a sesiones.
Este ejemplo hace uso de la opcin wsess, la opcin burst y la opcin rate.
La opcin wsess requiere de tres parmetros: el nmero total de sesiones,
el nmero de peticiones por sesin y el tiempo de espera entre rfagas. En
este caso solicitamos 100 sesiones, con 9 peticiones por sesin y 1 segundo
de espera entre rfagas. El parmetro burst define el nmero de peticiones
por rfaga, 3 en este caso, y finalmente el parmetro rate indica cuntas
sesiones se crean por segundo, 10.
$ httperf --hog --wsess=100,9,1 --burst=3 --rate=10
--server=127.0.0.1 --uri /
TABLA 3-9
Como ltimo ejemplo veremos el uso de la carga mltiple orientada
a sesiones. Para ello, utilizamos un fichero con el formato ya descrito, y que
en este caso tiene dos sesiones. El fichero es usado como tercer parmetro
de la opcin wsesslog. Opcin que cuenta con otros dos parmetros: el
primero es el nmero de sesiones y el segundo el tiempo entre rfaga (por
defecto, aunque puede ser modificado en el fichero). Finalmente se
establece el ratio. Este ejemplo creara 100 sesiones, a partir del fichero
sess.txt, que contiene 2 tipos de sesin, con 1,2 segundos de espera entre
rfaga y una creacin de 10 sesiones por segundo.
$ cat sess.txt
/sysinfo/index.php?disp=dynamic think=1.0
/sysinfo/js.php?name=jquery.timers
/sysinfo/js.php?name=jquery.treeTable
/sysinfo/js.php?name=jquery.jgrowl
/sysinfo/xml.php
/sysinfo/language/language.php?lang=es
/sysinfo/index.php?disp=static
/phpminiadmin/index.php
/phpminiadmin/index.php?phpinfo=1
$ httperf --hog --wsesslog=100,1.2,sess.txt --rate=10 --server=127.0.0.1
TABLA 3-10
74 Herramientas | 3
OBSERVACIN 3-1. Apache Benchmark vs. HTTPerf
En el caso de Apache Benchmark hemos dibujado una tabla de
conexiones que representa su sencillo funcionamiento: tantos hilos como
conexione concurrentes hemos fijado y tantas peticiones como es capaz de
ejecutar en cada hilo como se puede ver en la [figura 3-3].
TABLA 3-11
Sin embargo, HTTPerf funciona de un modo determinista. Nosotros
los que fijamos es cuntas conexiones o sesiones queremos en total y
cuntas por segundo. El software gestiona cmo conseguir ese valor con el
mnimo gasto de recursos, tardando un tiempo total que ser el total/ratio.
10ms
20ms
30ms
40ms
50ms
60ms
70ms
80ms
90ms
100ms
Figura 3-3 | Apache Benchmark | Conexiones
HILO\MSEC 10ms 20ms 30ms 40ms 50ms 60ms 70ms 80ms 90ms 100ms
Hilo 1
Hilo 2
Hilo 3
Hilo 4
Hilo 5
Hilo 6
..
Hilo 10
Pruebas de Rendimiento TIC 75
Ejemplificado: si a HTTPerf le hemos dicho que queremos 10
conexiones por segundo, l determina que tiene que hacer, en el peor caso
una conexin cada 100ms. Con lo cual, si la realiza y tarda 40ms. Lo que
tendremos sern conexiones secuenciales en un nico hilo. Y la
concurrencia del proceso ser 1 como podemos ver en la [figura 3-4].
TABLA 3-12
En el caso de las sesiones, en el momento que aparece un tiempo
de espera de 1 segundo y varias rfagas, la concurrencia aparece. Pero a
diferencia de lo que suceda con Apache Benchmark: 3 sesiones no implican
3 hilos. 3 sesiones pueden suponer 3 hilos, o pueden suponer 6 hilos o
pueden suponer 9 hilos concurrentes. Depender del tiempo de espera, del
nmero de peticiones y del nmero de peticiones por rfaga.
1
0
m
s
2
0
m
s
3
0
m
s
4
0
m
s
5
0
m
s
6
0
m
s
7
0
m
s
8
0
m
s
9
0
m
s
1
0
0
m
s
1
1
0
m
s
1
2
0
m
s
1
3
0
m
s
1
4
0
m
s
1
5
0
m
s
1
6
0
m
s
1
7
0
m
s
1
8
0
m
s
1
9
0
m
s
n
190 Anlisis de resultados | 6
6.2 | LA ANORMALIDAD EN EL RENDIMIENTO
Si la normalidad son lneas rectas, la anormalidad son lneas que
bajan o que suben, cuando deberan hacer justo lo contrario o no hacer
nada.
Por ello consideremos patrones grficos anormales aquellos que
presente las siguientes caractersticas:
Descensos, ms o menos bruscos, en la lnea que contiene
la mtrica de rendimiento del servicio: nmero de
peticiones atendidas por unidad de tiempo.
Por qu se considera una anormalidad? Porque un
servicio que escala correctamente debe aumentar su
rendimiento (nmero de peticiones atendidas por unidad
de tiempo) cuando el nmero de usuarios crece. De la
misma forma un servicio no congestionado debe
mantenerlo estable si el nmero de usuarios se mantiene
constante.
Ascensos, ms o menos bruscos, en los valores estadsticos
de los tiempos de respuesta sin que exista aumento del
nmero de usuarios.
Por qu se considera una anormalidad? Porque un
servicio no congestionado debe mantener estable el
tiempo de respuesta de las peticiones.
Ascensos, ms o menos bruscos, en los valores estadsticos
de errores en las respuestas.
Por qu se considera una anormalidad? Porque un
servicio no congestionado debe mantener una tasa de
error prxima a 0.
Pruebas de Rendimiento TIC 191
Por otra parte, la anormalidad tiene dos causas races diferentes y
que trataremos de forma independiente en esta seccin: la derivada de una
congestin progresiva por falta de capacidad para atender peticiones o la
derivada de la existencia de un error en el servicio.
Anormalidad derivada de congestin/falta de capacidad
El rendimiento anormal derivado de una congestin o falta de
capacidad, grficamente se identifica por un descenso progresivo y
constante del nmero de peticiones atendidas por el servicio (aunque no
haya un descenso del nmero de usuarios) y un aumento progresivo y
constate de los tiempos de respuesta.
FIGURA 6-5
La [figura 6-5] muestra el grfico que se obtiene tras cargar el
fichero de resultados de una prueba de rendimiento que presenta
congestin en el componente Grfico de Resultados de Jmeter.
Es sencillo identificar cmo los tiempos de respuesta, a partir de un
punto comienzan a aumentar de forma clara, mientras que el nmero de
peticiones atendidas por el servicio comienza a disminuir.
Rendimiento normal Rendimiento anormal
192 Anlisis de resultados | 6
FIGURA 6-6
La [figura 6-6] muestra el crecimiento del tiempo de respuesta de
las peticiones que se obtiene de cargar el mismo fichero de resultados el
anterior en el componente Response Time Graph de Jmeter. Otro indicador
de congestin, siempre que no estn aumentando los usuarios.
Anormalidad derivada de errores
Si el rendimiento anormal, derivado de una congestin o falta de
capacidad, grficamente se identifica por cambios progresivos, el causado
por errores se caracteriza por ser abrupto.
Es decir, el indicador grfico que encontraremos ante un error ser
un cambio en las lneas de peticiones atendidas y tiempo de respuesta muy
acusado.
Cuando se presentan errores la consecuencia es la denegacin del
servicio: la incapacidad del servicio de atender nuevas peticiones. Esta
incapacidad puede ser transitoria o permanente, en funcin de si el error
causa la cada total del servicio o no lo hace.
A esta situacin de degradacin abrupta del rendimiento se puede
llegar de dos formas diferentes.
C
O
N
G
E
S
T
I
N
Pruebas de Rendimiento TIC 193
La primera, y en la que centraremos nuestra atencin, es la que se
produce tras una fase de normalidad que, de forma imprevista, tras un
producirse el error desencadena una fase anormal de rendimiento.
La segunda es la cada del servicio despus de un periodo
prolongado de congestin/falta de capacidad. No obstante, ese caso no ser
el evaluemos, puesto que, a efectos prcticos, es la evolucin natural del
incremento de la congestin.
FIGURA 6-7
La [figura 6-7] muestra el grfico que se obtiene tras cargar el
fichero de resultados de una prueba de rendimiento que presenta un error
en el componente Grfico de Resultados de Jmeter.
En el grfico podemos comprobar cmo de forma imprevista, tras
un periodo de rendimiento normal, donde el servicio ha escalado de forma
adecuada al crecimiento de usuarios y ha mantenido el tiempo de respuesta
estable, algn problema en el servicio, derivado generalmente del
incremento del nmero de usuarios concurrentes (agotamiento de pools de
conexiones, interbloqueos en ficheros, condiciones de carrera, ...) causa un
punto de denegacin de servicio.
Tiempo de respuesta estable
Fallo
Rendimiento normal Rendimiento anormal
194 Anlisis de resultados | 6
6.3 |RENDIMIENTO: ERRORES Y OPTIMIZACIN
Sabemos, porque lo comentamos en el anterior captulo que hay
unas funciones que son propensas a los problemas de rendimiento.
Estos errores pueden ser bien derivados de una excesiva congestin
(los denominados cuellos de botella) en la infraestructura IT, bien derivados
de la realizacin de determinadas acciones errneas contraproducentes
para el correcto escalado de un sistema.
Los puntos conflictivos que comentamos en el captulo anterior
eran los siguientes:
Funciones CRUD (Create, Read, Update, Delete) sobre las
diferentes capas de de informacin: memoria, disco, bases
de datos, servicios remotos, ...
Funciones de complejidad igual o peor en O(n
2
) con n
variable, no acotado y creciente en funcin de aspectos
externos: usuarios, tiempo, uso...
Vaya por delante, antes de profundizar en esta seccin que la
optimizacin de servicios IT dara para escribir otro libro, o quiz dos. Por
tanto lo que aqu se cuenta no pretende ser el mayor compendio sobre
optimizacin de sistemas IT, sin embargo s que pretenden ser unas
pinceladas estratgicas sobre qu priorizar y cmo hacerlo.
El primer paso: no implementar acciones errneas
El primer paso, fundamental, para optimizar el sistema IT debe
empezar por la eliminacin de determinadas acciones errneas en la
implementacin de servicios, tanto en el diseo de las acciones CRUD, como
en la complejidad de las funciones.
Por ello el primer paso es conocer cules son las acciones errneas
ms comunes para poder corregirlas. Vamos a identificar, por tanto, las ms
comunes en acceso a bases de datos, acceso a otros servicios, gestin de las
capas de persistencia locales y complejidad.
Pruebas de Rendimiento TIC 195
Conexiones a base de datos
No limitar el nmero mximo de conexiones a la base de datos,
provocando su congestin y posible cada.
No reutilizar conexiones, generando nuevas conexiones de
forma innecesaria.
No cerrar adecuadamente la sesin, manteniendo conexiones
abiertas y sin uso.
No utilizar un pool de conexiones como mecanismo de gestin
de las conexiones la base de datos garantizando de esta forma
la reutilizacin, el lmite de conexiones y su adecuada gestin.
No gestionar adecuadamente los tiempos mximos de espera
(timeout), alargando el tiempo de respuesta de forma
innecesaria.
Conexiones a otros servicios Web y NO-Web.
No implementar mecanismos de cacheo intermedios
generando peticiones innecesarias y alargando los tiempos de
espera. Ej.: solicitar una misma informacin remoto en
sucesivas ocasiones en vez de generar una copia local y
comprobar nicamente si ha sido modificada.
Usar de protocolos de comunicacin poco eficientes para la
realizacin de tareas para las que existen protocolos
optimizados, generando una sobrecarga en el servicio. Ejemplo:
usar protocolo HTTP para la transmisin de ficheros de gran
tamao entre sistemas en lugar de utilizar soluciones como
NFS/CIFS/etc.
No cerrar adecuadamente el canal de comunicacin,
manteniendo conexiones abiertas y sin uso.
196 Anlisis de resultados | 6
No gestionar adecuadamente los tiempos mximos de espera
(timeout), alargando el tiempo de respuesta de forma
innecesaria.
Gestin de las capas de persistencia locales
No limitar el tamao mximo de informacin por sesin de
usuario, impidiendo el control efectivo de la cantidad de
memoria local usada.
Almacenar como parte de la sesin de usuario informacin
excesiva o que, por tamao, debera ser almacenada en disco.
No gestionar correctamente el cierre de sesin del usuario de
tal forma que se garantice la eliminacin de los contenidos de
sesin que no son necesarios en el sistema.
Compartir concurrentemente ficheros locales que requieren
acceso de escritura, causando problemas de bloqueo o de
condiciones de carrera.
Otros errores
Importacin de funciones, objetos, libreras o clases que nunca
son usadas.
Generacin de informacin de depuracin excesiva, no
graduable y que no permite ser deshabilitada.
Uso de algoritmos con complejidad cuadrtica, o peor, para
realizar funciones para las que existen algoritmos ms ptimos.
Uso de consultas pesadas a sistemas externos (SGDB, LDAP, ...)
que pueden ser resueltos mediante dos consultas simples y una
funcin de complejidad lineal local.
Pruebas de Rendimiento TIC 197
El segundo paso: optimizar los servidores
El segundo paso en importancia a la hora mejorar el rendimiento
del sistema IT es la optimizacin de los servidores con conforman la
infraestructura IT en la que se despliegan nuestros servicios.
El proceso de optimizacin de servidores, normalmente es descrito
por cada uno de los fabricantes, o en su defecto por terceros, y permite
adaptar las configuraciones genricas ofrecidas a escenarios de alta
demanda de rendimiento.
Actualmente existen guas de optimizacin de rendimiento para
prcticamente todos los productos comunes que podemos encontrar en
cualquier infraestructura IT: servidores web, servidores de aplicacin, bases
de datos, ...
El paso final: dimensionar adecuadamente
Una vez hayamos desterrado las acciones errneas en la
implementacin de servicios y optimizado los servidores de nuestra
infraestructura IT es el momento en el que podremos determinar si la
capacidad de nuestra infraestructura es el adecuado o no lo es para la
calidad de servicio que deseamos ofrecer.
Por ello, si despus de haber dado los dos primeros pasos, nuestro
rendimiento no es el que deseamos, entonces es que nuestra
infraestructura no tiene la capacidad necesaria, y deberemos
redimensionarla hasta adecuarla a nuestras necesidades.
198 Anlisis de resultados | 6
6.4| EXTRAPOLAR DATOS DE RENDIMIENTO
Extrapolar datos de rendimiento es una de las formas ms seguras
de acabar despedido o, al menos, abroncado por un superior. Esto siempre
hay que tenerlo en mente cuando hablemos de extrapolacin.
Por ello, extrapolar datos puede estar bien para consumo interno,
pero hay que tener muchsimo cuidado con las afirmaciones que hacemos a
partir de extrapolaciones.
Saber que respondemos a 25 usuarios simultneos en 500ms en un
servidor con 2GB de RAM y 2 ncleos, no significa que podamos asegurar
que se responder a 50 usuarios en esos mismos 500ms en un servidor con
4GB de RAM y 4 ncleos.
Por qu? El primer motivo es porque quiz a los 32 usuarios
concurrentes exista un error que haga que el servicio se caiga. El segundo es
porque el escalado de un sistema mnimamente complejo es cualquier cosa
menos lineal.
Extrapolar datos de rendimiento entre arquitecturas
Esta es una de las extrapolaciones ms comunes: hemos hecho una
prueba de rendimiento en un entorno de preproduccin y queremos saber
cmo se comportar la aplicacin en el entorno de produccin.
Antes de seguir una aclaracin: vaya por delante que si tu vida, tu
trabajo, tu dinero o algo que te importe depende de conocer cmo se va a
comportar la aplicacin en el entorno de produccin la recomendacin es
clara: testala en el entorno de produccin.
Bien. Espero haber sido claro. Y ahora, una vez estoy seguro que no
vas a morir, ni vivir debajo de un puente por haber ledo este libro, lo
siguiente que tengo que decir es que la nica forma de extrapolar
resultados, con un mnimo de precisin, es siendo capaz de realizar varias
mediciones controladas de la misma aplicacin en diferentes tamaos de
arquitectura.
Pruebas de Rendimiento TIC 199
Es decir, si nicamente puedes utilizar una arquitectura de prueba,
tienes la misma probabilidad de predecir el comportamiento en produccin
que de ganar a la ruleta.
Por tanto, necesitas utilizar, al menos, dos arquitecturas de prueba.
Aunque lo deseable sera que utilizases cuantas ms mejor. Esto, la nica
forma que existe de hacerlo, si no te sobra el dinero, es mediante
virtualizacin.
Hecha esta matizacin, el paso siguiente es replicar un test de
rendimiento en diferentes configuraciones de ese entorno para distintos
valores de CPU y RAM, y a partir de esa informacin determinar un patrn
de escalado del mismo y ver de qu variable es dependiente. Una vez
tenemos el patrn de escalado, deberamos ser capaces de predecir, por
interpolacin, qu sucedera en un sistema con un tamao N veces superior.
No obstante, hago un inciso: para que la interpolacin tenga algn
viso de cumplirse, los elementos de infraestructura comn del entorno de
produccin deben estar correctamente dimensionados y ser capaces de
soportar la carga de peticiones interpolada. Dicho de una forma ms
sencilla, si nosotros determinamos que nuestro servicio va a triplicar el
rendimiento de preproduccin, que ha sido de 50 usuarios, para que eso sea
cierto, toda la infraestructura de produccin compartida con el resto de
servicios que ya existen debe ser capaz de soportar esos 150 usuarios ms.
En caso contrario, no se cumplir tal suposicin.
EJEMPLO 6-1 - Un ejemplo sencillo de extrapolacin
Para finalizar este apartado, vamos a calcular la extrapolacin de un
servicio de eLearning Moodle autocontenido en un nico sistema,
es decir, tanto el servidor HTTP Apache, como el SGDB MySQL estn
en el mismo sistema (lo cual simplifica el clculo mucho).
Este sistema se ha virtualizado en 4 configuraciones diferentes: 1
ncleo / 512MB, 1 ncleo / 2GB, 2 ncleos / 1GB y 2 ncleos / 2GB.
200 Anlisis de resultados | 6
Sobre estas configuraciones se ha realizado una prueba de
becnhmarking (peticiones sin espera) para determinar el nmero
mximo de peticiones por segundo atendidas por el sistema con 10
usuarios concurrentes.
Configuracin Peticiones por segundo
1 core 3GHZ, 0.5 GB 25,6
1 core 3GHZ, 2GB 25,5
2 cores 3GHZ, 1 GB 43
2 cores 3GHZ, 2GB 43,3
TABLA 6-1
El resultado es el que se recoge en la [tabla 6-1] donde se puede
comprobar que el escalado es dependiente de la CPU y no parece
verse afectado por la cantidad de memoria RAM disponible.
Con estos valores se realiza un clculo de una recta de regresin
lineal, siendo X el nmero de ncleos del sistema y desprecindose
el impacto de la memoria RAM. La recta buscada es 7 + 18X
Segn este clculo para un sistema de 4 ncleos, independiente de
la memoria RAM disponible el rendimiento debera ser de 79
peticiones por segundo atendidas.
Para finalizar, se ha realizado una prueba en un sistema real con 4
ncleos a 3GHZ y 4GB de memoria RAM. El resultado obtenido ha
sido de 77,5 peticiones por segundo atendidas.
FIGURA 6-8
Pruebas de Rendimiento TIC 201
Extrapolar peticiones de usuario
La extrapolacin del nmero de peticiones de usuarios
concurrentes que realizan peticiones sin espera es otra de las grandes reas
de cbala de las pruebas de rendimiento.
Mi consejo vuelve a ser el obvio, si necesitas conocer con precisin
qu tiempos de respuesta van a tener un nmero grande de usuarios que se
comportan de forma normal, haciendo una peticin cada varios segundos,
el procedimiento correcto, si no puede generarse esa carga desde un nico
sistema, es generarlo de forma distribuida.
No obstante, existe un mtodo, no del todo fiable, para convertir
peticiones sin espera en usuarios convencionales.
La idea es la siguiente: sin que exista degradacin del servicio, N
usuarios totalmente concurrentes, sin tiempo de espera entre peticiones,
producen un tiempo de respuesta T.
Por otra parte, un usuario convencional tiene un tiempo de espera
U entre peticin y peticin. Por tanto, el sistema ser capaz de atender a
(U/T)*N usuarios.
Si continuamos con el caso del [ejemplo 6-1] el sistema est
respondiendo en 227ms a 10 usuarios concurrentes. Si damos por buena la
estimacin que hicimos por la que un usuario navega a un ritmo de 1 accin
cada 3 segundos, el resultado es que el sistema Moodle sera capaz de
atender aproximadamente a 132 usuarios con actividad simultnea y un
tiempo de respuesta entorno a los 225ms.
La prueba real ha determinado que 130 usuarios simultneos con
acciones cada 3 segundos tienen un tiempo de respuesta de unos 250ms.
202 Anlisis de resultados | 6
Pruebas de Rendimiento TIC 203
CASO PRCTICO | 7
A lo largo de los casos prcticos de este captulo vamos a ir
ejemplificando de la forma ms real posible todos los conceptos que se han
desarrollado a lo largo del texto.
Esta prctica hace uso de BITNAMI MOODLE STACK, disponible en
https://bitnami.com/stack/moodle. Se recomienda su instalacin en una
mquina virtual como paso inicial para la ejecucin de este caso prctico.
Advertencia: mejorar la legibilidad final de cada pgina impide la
numeracin de tablas y figuras en este captulo.
7.1 | PRIMERA PARTE: MOODLE PREPRODUCCIN
El primer paso sern plantear los objetivos de la prueba que vamos
a realizar contestando algunas de las cuestiones que ya vimos en el captulo
4.
I. Qu servicio/infraestructura/... queremos evaluar?
Moodle sobre el entorno de preproduccin.
II. Queremos una valoracin de la experiencia del usuario u obtener informacin
interna de nuestros sistemas?
Valoracin de la experiencia de usuario y garantizar que las respuestas se
emiten en un tiempo medio inferior a 1000ms
III. En caso de que queramos valorar la experiencia de usuario, nos interesa su
ubicacin geogrfica? Y las limitaciones de nuestra conexin WAN?
No.
IV. Necesitamos conocer cul es la capacidad mxima del sistema y en qu punto
deja este de atender usuarios de forma correcta?
204 Caso prctico | 7
No.
V. Queremos saber si podemos hacer frente a avalanchas puntuales en nuestro
nmero habitual de usuarios?
No
VI. En caso de que exista, queremos saber si el contenido de terceros (p.ej. APIs
de servicios web) est perjudicando nuestro rendimiento?
No.
VII. Queremos evaluar un servicio que va a ser liberado en produccin? Es una
nueva versin de uno que ya existe previamente?
S, se trata de un servicio a liberar en produccin, pero cuyo entorno todava
no est listo y desea adaptarse en base a estos resultados.
Por motivos de calendario se va a realizar un test previo en preproduccin.
VIII. Queremos evaluar un servicio que se encuentra ya en produccin?
No.
IX. Necesitamos conocer la evolucin del servicio en el tiempo?
No.
X. Existen cuestiones especficas por reas/departamentos?
a. Queremos conocer cmo ha mejorado o empeorado el rendimiento de la
versin actual respecto a la pasada? Existe un baseline previo?
No, no existe baseline previo.
b. Queremos conocer cmo influye el aumento o disminucin de recursos
hardware? S, necesitamos conocer la estimacin de rendimiento del sistema
en el entorno de produccin.
c. Deseamos detectar errores tempranos en el desarrollo? No
El resultado de la planificacin es que disponemos de un servicio
que queremos lanzar por primera vez en produccin, pero cuyo sistema de
produccin todava no est listo y, adems, es posible que puedan depender
de los resultados de esta prueba algunos ajustes de ese entorno.
Pruebas de Rendimiento TIC 205
Cuestiones de Planificacin
Dnde hacer la prueba?
La prueba se va a realizar en el entorno de preproduccin-
Cunta carga generar?
Se desconoce el uso real del servicio. Se obtiene una estimacin de
uso de un servicio que tiene el mismo pblico objetivo y una importancia
equivalente en la organizacin.
# cat access.log | cut -d" " -f4 | cut -d":" -f-3 | awk '{print "requests
from " $1}' | sort | uniq -c | sort -n | tail -n1
1743 requests from 05/May/2014:09:20
# cat access.log | cut -d" " -f4 | awk '{print "requests from " $1}' |
sort | uniq -c | sort -n | tail -n1
196 requests from 05/May/2014:09:20:23
En base a ello se definen los siguientes nmeros de usuarios:
Usuarios medios: 29 usuarios.
Pico de usuarios: 196 usuarios.
Quin participa?
Se trata de un nico servicio HTTP, no se va a hacer evaluacin de
otro tipo de arquitectura. En principio, 1 persona con conocimiento de la
arquitectura IT que soporta el servicio.
Cundo hacer la prueba?
En este caso concreto, dado que se trata del entorno de
preproduccin, no existen ventanas de tiempo restrictivas.
Desde donde hacer la prueba?
Desde la misma subred del sistema de preproduccin.
206 Caso prctico | 7
Qu medidas obtener?
No se quiere valorar la capacidad interna del sistema. Por tanto se
obtendrn las medidas genricas externas.
Diseo de prueba
Dado que no tenemos usuarios, ni estimacin de uso, no vamos a
disear la prueba simulando comportamiento real de usuario, sino que
vamos a proceder a un diseo de prueba en base a unos criterios CRUD. La
complejidad de cdigo no se evaluar debido al esfuerzo que suponer
hacerlo para un desarrollo externo sobre el que no poseemos conocimiento
detallado.
Con la informacin que disponemos conocemos que moodle hace
uso intensivo de disco en el acceso a ficheros de cursos, y tal funcin ser
testada y, paralelamente, hace uso de funciones CRUD en base de datos.
Funcionalidad que tambin ser evaluada. Dado que no se tiene
informacin de uso real se utilizar una valoracin ponderacin de 70% para
acciones R (lecturas) y 30% para operaciones de
Creacin/Actualizacin/Eliminacin que se considerarn equiprobables
(10% cada operacin). El tiempo entre peticin ser de ~2 segundos.
Capa\Accin C R U D
Memoria Local*
Disco Local
SGBD
Ruta Tipo Accin
/moodle/ SGDB - R Pgina principal
/moodle/login/ SGDB - R Login
/moodle/course/ SGDB - R Pgina de cursos
/moodle/course/view.php SGDB - R Ver curso
/moodle/mod/page/view.php FILE - R Ver contenido de curso
/moodle/mod/quiz/view.php SGDB - R Ver test
/moodle/mod/quiz/attempt.php SGDB - R Realizar test
/moodle/mod/forum/post.php SGDB - C Aadir tema al foro
/moodle/mod/forum/post.php?edit SGDB - U Editar tema del foro
/moodle/mod/forum/post.php?delete SGDB - D Eliminar tema del foro
Implementacin de prueba
La prueba va a ser implementada en JMeter. Para ello,
comenzamos ejecutando el servidor proxy dentro de nuestro banco de
pruebas.
A partir de l reconstruiremos las peticiones qu
como parte de la prueba y agruparemos todas las peticiones que se generan
a partir de cada una en controladores simples
A continuacin debemos evaluar los parmetros de las peticiones
para identificar posibles valores que sean nic
dependientes de la sesin.
Pruebas de Rendimiento TIC 207
La prueba va a ser implementada en JMeter. Para ello,
comenzamos ejecutando el servidor proxy dentro de nuestro banco de
A partir de l reconstruiremos las peticiones que deseamos ejecutar
como parte de la prueba y agruparemos todas las peticiones que se generan
controladores simples.
A continuacin debemos evaluar los parmetros de las peticiones
para identificar posibles valores que sean nicos para cada peticin o
208 Caso prctico | 7
Detectamos dos parmetros:
sesskey: identificado
cada usuario. Se devuelve codificado dentro de cdigo
JScript de las pginas
peticiones.
Es necesario en las siguientes peticiones:
/quiz/attempt
/forum/post/edit
/forum/post/delete
id: identificador autoincremental que identifica cada uno
de los posts creados en el foro
de eliminacin y edicin
Para el control de sesskey haremos uso de un postprocesador de
expresiones regulares. Dado que sesskey
para mejorar el rendimiento, lo asociaremos a la accin de login, que ir
dentro de un controlador only-once y slo se ejecutar 1 vez por usuario.
identificador de sesin nico. Asociado al login de
e devuelve codificado dentro de cdigo
de las pginas de cada peticin. No vara entre
Es necesario en las siguientes peticiones:
/quiz/attempt
/forum/post/edit
/forum/post/delete
identificador autoincremental que identifica cada uno
en el foro. Es necesario en las acciones
de eliminacin y edicin de mensajes del foro.
haremos uso de un postprocesador de
sesskey no vara a lo largo de una sesin, y
para mejorar el rendimiento, lo asociaremos a la accin de login, que ir
once y slo se ejecutar 1 vez por usuario.
Pruebas de Rendimiento TIC 209
La expresin
regular a usar ser
"sesskey":"(.+?)". La
cual capturar el
contenido entre
parntesis asociado la
variable sesskey que se
encuentra en una
estructura JScript,
dentro de cada pgina
devuelta por el
servidor, como la
siguiente:
M.cfg={"wwwroot":"http:\/\/192.168.1.106:8080\/moodle","ses
skey":"9hevcj1s7a" ...
Por otra parte el
cdigo autoincremental en
principio podramos pensar
gestionarlo nicamente con
un contador o con un campo
autoincremental ledo de un
fichero CSV, pero vamos a
tener problemas de
concurrencia.
Conforme
incrementsemos el nmero
de threads, debido a los
temporizadores aleatorios, se
210 Caso prctico | 7
intentaran borrar mensajes que todava no se hubiesen generado,
producindose errores y quedando mensajes sin guardar.
Por ello, en condiciones de alta concurrencia, lo recomendable es
obtener el valor de ID desde el servidor. En este caso, lo vamos a hacer
utilizando dos elementos, por un lado el contador local, para generar
asuntos de mensaje nico y por otro un extractor de expresiones regulares,
para en funcin del asunto del mensaje nico, obtener su ID.
Cada mensaje que generemos tendr un asunto test_ID, donde ID
ser el valor del contador, que hemos seleccionado comience en 2000. Por
tanto el primer mensaje creado ser test_2000
A partir de esa informacin, una vez el mensaje se ha creado,
hacemos una peticin para recuperar la lista de mensajes y vemos el HTML
creado para parsear el valor ID nico del mensaje que acabamos de crear,
nuevamente mediante un postprocesador de expresiones regulares.
<tr class="discussion r0"><td class="topic starter"><a
href="http://192.168.1.106:8080/moodle/mod/forum/discuss.php
?d=1090">test_2000</a></td>
Este sera el HTML devuelvo y el ID nico que nos interesa es el
1090 que despus deberemos usar para editarlo y para borrarlo. Por tanto,
vamos a colocar un postprocesador con una nueva expresin regular, que
permita que cada vez que se cree un mensaje obtengamos su ID.
Pruebas de Rendimiento TIC 211
Con las dos variables ${sesskey} y ${contador} deberemos modificar
todas las peticiones que hacen uso de esos parmetros variables.
En la imagen superior se puede ver el ejemplo de la peticin de
confirmacin de un mensaje en el foro, la cual necesita contener la clave
nica de esa sesin y el nmero de post nico a eliminar.
Llegados a este punto vamos a recapitular la implementacin de la
prueba en la siguiente imagen, porque es un proceso relativamente
complejo y que la primera vez que se lee puede causar cierta
desorientacin.
212 Caso prctico | 7
Tenemos por un lado el controlador "Only Once" que garantiza que
nicamente se va a hacer login una vez por sesin. Asociado al proceso de
Login (para cada sesin), el extractor de expresiones regulares que obtiene
la variable ${sesskey}.
Una vez se ha realizado login
visualizacin de curso, de ejecucin de test y de
creacin/actualizacin/eliminacin de mensajes en el foro.
Para la actualizacin/eliminacin de mensajes
el ID nico y autoincremental de cada mensaje que hemos creado. Para ello,
Tenemos por un lado el controlador "Only Once" que garantiza que
nicamente se va a hacer login una vez por sesin. Asociado al proceso de
, el extractor de expresiones regulares que obtiene
na vez se ha realizado login se ejecutan las peticiones de
visualizacin de curso, de ejecucin de test y de
creacin/actualizacin/eliminacin de mensajes en el foro.
Para la actualizacin/eliminacin de mensajes necesitamos obtener
nico y autoincremental de cada mensaje que hemos creado. Para ello,
lo que hacemos es, por un lado crear los mensajes con un asunto nico
asociado a un contador local, y de esa forma nos garantizamos poder
construir una expresin regular que nos devuelva
servidor tras la creacin del mensaje. Una vez tenemos el ID asignado por el
servidor, ya podemos realizar las peticiones de edicin y borrado.
Llegados a este punto, el nico elemento que necesitamos es
colocar los temporizadores para la simulacin del tiempo de pausa de cada
usuario. Hemos definido un tiempo de pausa aproximado de 2 segundos
entre peticin principal y peticin principal.
Para el temporizador seleccionamos un temporizador aleatorio
gaussiano con un valor 2000ms +
primera peticin de cada uno de los controladores simples.
Pruebas de Rendimiento TIC 213
lo que hacemos es, por un lado crear los mensajes con un asunto nico
asociado a un contador local, y de esa forma nos garantizamos poder
construir una expresin regular que nos devuelva el ID que nos asigna el
servidor tras la creacin del mensaje. Una vez tenemos el ID asignado por el
servidor, ya podemos realizar las peticiones de edicin y borrado.
Llegados a este punto, el nico elemento que necesitamos es
para la simulacin del tiempo de pausa de cada
usuario. Hemos definido un tiempo de pausa aproximado de 2 segundos
entre peticin principal y peticin principal.
Para el temporizador seleccionamos un temporizador aleatorio
+- 250ms y lo colocamos dentro de la
primera peticin de cada uno de los controladores simples.
Finalmente, para evaluar si
el resultado es el deseado
ponemos un colocamos como
receptor de informacin un rbol
214 Caso prctico | 7
de Resultados y hacemos una ejecucin de prueba con 1 thread y 1
iteracin.
Deberemos comprobar que todas las peticiones se ejecutan
adecuadamente y que se estn usando de forma adecuada las variables que
hemos definido.
En la imagen superior se puede ver cmo la variable sesskey ha sido
correctamente inicializada al valor devuelto por la web, y cmo el contador
de ID ha sido inicializado a 10, segn el valor que hemos seleccionado.
Si todo est correcto podemos seleccionar el nmero de usuarios
virtuales simultneos de la prueba que se haba definido ~30 usuarios y un
periodo de subida de 120 segundos.
receptor por un escritor de datos simple.
Una vez hecho y seleccionado un nombre descriptivo para los datos
de la prueba, podemos proceder a su ejecuci
Ejecucin de la prueba
Abrimos la ventana de log y vamos controlando los threads creados
y el ritmo de creacin.
Una vez haya transcurrido el minuto en el que se crearn todos los
hilos necesarios hasta llegar a 30 hilos, lo recomendable es esper
periodo de estabilizacin del test antes de su finalizacin. Para una prueba
de carga como la descrita un tiempo razonable pueden ser
periodo de subida.
En este tiempo tambin podemos monitorizar el estado del
servidor que estamos evaluando.
Pruebas de Rendimiento TIC 215
El ltimo punto ser cambiar el
receptor por un escritor de datos simple.
Una vez hecho y seleccionado un nombre descriptivo para los datos
de la prueba, podemos proceder a su ejecucin.
Abrimos la ventana de log y vamos controlando los threads creados
Una vez haya transcurrido el minuto en el que se crearn todos los
hilos necesarios hasta llegar a 30 hilos, lo recomendable es esperar un
periodo de estabilizacin del test antes de su finalizacin. Para una prueba
de carga como la descrita un tiempo razonable pueden ser unas 3 veces el
En este tiempo tambin podemos monitorizar el estado del
216 Caso prctico | 7
Evaluacin de resultados
Cargamos las los grficos de resultados en JMeter. Y vemos las
esperadas lneas, con lo cual ha habido un escalado razonablemente
aceptable.
Por su parte los tiempo de respuesta, no son una lnea perfecta, lo
que denota un mnimo de congestin
inferior y una superior, de forma alterna, sin que exista una tendencia al
alza. 30 usuarios parece ser el lmite
rendimiento del sistema.
Finalmente podemos proceder a evaluar los tiempos de respuesta
del servicio.
Cargamos las los grficos de resultados en JMeter. Y vemos las
con lo cual ha habido un escalado razonablemente
Por su parte los tiempo de respuesta, no son una lnea perfecta, lo
mnimo de congestin debido a que oscilan entre una cota
inferior y una superior, de forma alterna, sin que exista una tendencia al
de escalado antes de una prdida de
nte podemos proceder a evaluar los tiempos de respuesta
Pruebas de Rendimiento TIC 217
Peticin Tiempo med. resp. Tiempo min. resp. Tiempo mx. resp.
/moodle/ 313 19 1072
/moodle/login/index.php 575 43 3132
/moodle/course/index.php 522 84 1251
/moodle/mod/quiz/startattempt.php 1197 214 2609
/moodle/mod/quiz/attempt.php 969 168 2467
/moodle/mod/forum/post.php 896 122 2980
/moodle/mod/forum/view.php 1180 203 2771
En general el tiempo medio de respuesta se mueve en torno a los
800ms y el mximo entorno a los 2500ms.
El rendimiento (nmero de peticiones atendidas) se mueve en
torno a 1300 peticiones por minuto.
Extrapolacin de resultados
Aprovechando la informacin de la tabla 6-1 para interpolacin de
Moodle, podemos intentar calcular el rendimiento que el sistema va a tener
en el entorno de produccin. A priori, la mejora del rendimiento derivada
de duplicar la capacidad de CPU del sistema est en torno al 70%. No
obstante, no es conveniente realizar extrapolaciones en sistemas que
presentan algn mnimo de congestin, porque los datos son menos fiables.
Configuracin Peticiones por segundo
1 core 3GHZ, 0.5 GB 25,6
1 core 3GHZ, 2GB 25,5
2 cores 3GHZ, 1 GB 43
2 cores 3GHZ, 2GB 43,3
En principio, si no hubiese congestin en la informacin, dado con
el entorno de produccin es un sistema con 4 ncleos y 4GB de memoria,
podemos esperar atender 50 usuarios simultneos, en produccin, con
estos tiempos medios entorno a los resultados obtenidos en esta prueba o a
30 usuarios simultneos (29 es el valor medio de usuarios estimados para el
servicio) con tiempos de respuesta entorno a 500ms.
218 Caso prctico | 7
7.2 | SEGUNDA PARTE: MOODLE PRODUCCIN
En base a los resultados obtenidos parece
produccin puede cumplir con los criterios de calidad de servicio fijados en
la planificacin y por ello se decide el paso a produccin del sistema, con la
configuracin diseada inicialmente: 4 ncleos y 4GB.
Antes de su apertura al usuario se acuerda la repeticin del test de
rendimiento, para confirmar los resultados extrapol
de preproduccin. Se repite la prueba y se obtienen los siguientes valores.
La grfica de resultados muestra una estabilidad en la prueba, con
un correcto escalado y unos tiempos de respuesta homogneos
ms claras y compactas.
MOODLE PRODUCCIN
obtenidos parece que el entorno de
cumplir con los criterios de calidad de servicio fijados en
se decide el paso a produccin del sistema, con la
configuracin diseada inicialmente: 4 ncleos y 4GB.
Antes de su apertura al usuario se acuerda la repeticin del test de
rendimiento, para confirmar los resultados extrapolados desde el entorno
Se repite la prueba y se obtienen los siguientes valores.
La grfica de resultados muestra una estabilidad en la prueba, con
un correcto escalado y unos tiempos de respuesta homogneos con lneas
Paralelamente, al representar los tiempos de respuesta
ningn tipo de congestin, como s presentaba (aunque muy ligera) el
entorno de preproduccin.
Peticin Tiempo med. resp.
/moodle/
/moodle/login/index.php
/moodle/course/index.php
/moodle/mod/quiz/view.php
/moodle/mod/quiz/startattempt.php
/moodle/mod/quiz/attempt.php
/moodle/mod/forum/post.php 1173
/moodle/mod/forum/view.php
TOTAL 351,875 ms
Finalmente, se evidencia una clara
respuesta, mejorndose el rendimiento que se haba calculado por
extrapolacin.
Pruebas de Rendimiento TIC 219
Paralelamente, al representar los tiempos de respuesta, no hay
ningn tipo de congestin, como s presentaba (aunque muy ligera) el
Tiempo med. resp. Tiempo min. resp. Tiempo mx. resp.
60 103 6371
60 44 4999
314 87 638
307 147 1027
306 220 975
300 36 644
1173 119 935
295 207 706
351,875 ms 120,375 ms 2036,875 ms
Finalmente, se evidencia una clara mejora en los tiempos de
respuesta, mejorndose el rendimiento que se haba calculado por
220 Caso prctico | 7
7.3 | TERCERA PARTE: MOODLE SGBD
Como ltimo punto de este ejemplo prctico, vamos a abandonar el
mbito web y vamos a dirigir nuestra atencin en la base de datos MySQL
de ese Moodle que acabamos de evaluar.
Vamos a suponer, por un momento, que por el motivo que sea, de
los vistos con anterioridad, no deseamos conocer el rendimiento del servicio
web, sino que lo que deseamos conocer es el rendimiento exclusivamente
de la base de datos. Qu deberamos hacer?
Primero: Elegir correctamente las consultas
Esta parte ejemplifica muy bien lo que comentamos dentro de la
seccin 5.1 en el apartado dedicado a diseo de pruebas no-web. El caso de
un SGBD es un caso claro de servicio no-web diferenciado por el contenido
de la peticin.
En este tipo de escenario tenemos dos posibilidades.
La primera, muy directa si se trata de un sistema de preproduccin,
donde podemos alterar el funcionamiento "natural" del sistema de base de
datos, es la posibilidad de identificar las peticiones que se producen desde
los clientes (en este caso desde el servicio Moodle) colocando la base de
dato en modo LOG. Huelga decir, que hacer logging intensivo de todas las
peticiones degradada el rendimiento del sistema de base de datos y no es
aplicable a un entorno de produccin, salvo, como es obvio, que tengamos
la capacidad de detener el servicio de produccin.
La otra opcin es la inversa, colocar los clientes en modo LOG (una
opcin que existe por ejemplo en algunos JDBC connectors) o directamente
tener que lidiar con el fuente del aplicativo para determinar las consultas
que se realizan.
En este caso vamos a tomar la primera solucin: identificar las
peticiones que realiza moodle colocando MySQL en modo LOG.
# cat /etc/my.cnf
[mysqld]
Pruebas de Rendimiento TIC 221
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
general_log=1
general_log_file=/var/log/mysql-queries.log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Para colocar MySQL (superior a 5.1.29) en modo LOG se deben usar
los parmetros general_log y general_log_file.
De esta forma seremos capaces de generar un fichero de logs
donde se almacenarn todas las peticiones recibidas por el SGDB.
Un ejemplo de su contenido puede ser el siguiente:
11 Query: SELECT DISTINCT st.id, st.tn, st.until_time FROM ticket st INNER
JOIN queue sq ON sq.id = st.queue_id WHERE 1=1 AND st.ticket_state_id IN
( 6 ) AND st.ticket_lock_id IN (2,3) AND st.user_id IN (2) AND sq.group_id IN
(1, 2, 3) AND st.ticket_state_id IN (6, 7, 8) AND st.until_time <=
1401289066 ORDER BY st.until_time DESC LIMIT 10;
11 Query: SELECT filename, content_type, content_size, content_id FROM
web_upload_cache WHERE form_id = '1401289180.2411938.17143986'
ORDER BY create_time_unix;
Una vez disponemos de las consultas slo nos queda ir a JMeter.
Segundo: JDBC en JMeter
El primer paso ser bajar el driver JDBC necesario para conectar a la
base de datos y colocarlo en el directorio /lib de JMeter.
Una vez hecho esto podremos tener acceso a la conexin JDBC a la
base de datos y podremos construir la prueba.
222 Caso prctico | 7
Tercero: Una pequea prueba de ejemplo
Aqu vemos un ejemplo muy simple de los elementos que
constituyen una prueba JDBC.
Por un lado tenemos la configuracin de la conexin JDBC.
: Una pequea prueba de ejemplo
Aqu vemos un ejemplo muy simple de los elementos que
Por un lado tenemos la configuracin de la conexin JDBC.
Y por otro un grupo de hilos donde en este caso aparecen tres
consultas. Cada consulta es algo tan sencillo como incluir la consulta que
hemos capturado en el LOG dentro de un campo.
Finalmente hemos includo un tipo de temporizador que en este
tipo de pruebas puede resultar muy til: el temporizador de rendimiento
constante.
Es un temporizador que bsicamente ajusta el retardo entre
peticin y peticin para ejecutar un total N en una unidad de tiempo. En
este caso lo hemos ajustado para rea
valor lo podemos obtener a partir del nmero de peticiones SQL que cada
peticin WEB desencadena. Dicho de otra forma, si sabemos que tenemos
20 peticiones WEB al segundo y que cada peticin WEB desencadena ~4
consultas SQL. Tendremos unas 80 peticiones SQL al segundo y unas 4.800
peticiones SQL al minuto.
Pruebas de Rendimiento TIC 223
Y por otro un grupo de hilos donde en este caso aparecen tres
a consulta es algo tan sencillo como incluir la consulta que
hemos capturado en el LOG dentro de un campo.
Finalmente hemos includo un tipo de temporizador que en este
tipo de pruebas puede resultar muy til: el temporizador de rendimiento
Es un temporizador que bsicamente ajusta el retardo entre
peticin y peticin para ejecutar un total N en una unidad de tiempo. En
este caso lo hemos ajustado para realizar 5.000 peticiones por minuto. Este
valor lo podemos obtener a partir del nmero de peticiones SQL que cada
peticin WEB desencadena. Dicho de otra forma, si sabemos que tenemos
20 peticiones WEB al segundo y que cada peticin WEB desencadena ~4
tas SQL. Tendremos unas 80 peticiones SQL al segundo y unas 4.800