Descargue el binario aquí. Además, considere citarnos.
El generador de carga HTTP es un generador de carga diseñado para generar cargas HTTP con diferentes intensidades de carga. Utiliza especificaciones de intensidad de carga según lo especificado por el limbo para generar cargas que varían en intensidad (número de solicitudes por segundo) con el tiempo. El generador de carga registra datos de nivel de aplicación y admite que se conectan a los demonios de medición de potencia externa. Especifica las solicitudes HTTP utilizando scripts Lua, que se leen en tiempo de ejecución.
La herramienta de generador de carga HTTP se puede ejecutar en dos modos: como director y como generador de carga. El modo Director inicia la herramienta en un modo donde analiza los perfiles y scripts necesarios, se conecta a dispositivos de medición de energía y recopila datos. El modo de generador de carga recibe instrucciones del director y genera las solicitudes reales. El modo se establece utilizando interruptores de línea de comando, lo que significa que al menos dos instancias del generador de carga HTTP deben estar ejecutándose para una prueba, una en cada modo. El generador de carga HTTP también es compatible con la generación de carga de nodos múltiples, donde un director se conecta a múltiples instancias que se ejecutan en el modo de generador de carga.
Estructura de este Readme:
El generador de carga tiene las siguientes tres características principales:
El generador de carga se puede utilizar para la prueba de aplicaciones web con respecto a la prueba de eficiencia energética, pruebas de comportamiento de escala a lo largo del tiempo y la prueba de escenarios dependientes del tiempo, como el efecto de explosiones repentinas, variaciones estacionales en los patrones de solicitud, tendencias, etc.
Primero construya o descargue el httploadgenetor.jar. Implemente el httploadgenerator en dos máquinas:
Además del JAR, necesita un perfil de intensidad de carga y un script Lua para generar las solicitudes reales. Proporcionamos un ejemplo para cada uno en el directorio EjemploFiles:
Descargue ambos archivos y colóquelos en la máquina del director. Para simplificar, asumiremos que los coloca en el mismo directorio que el httploadgenerator.jar . Ahora también modificaría el script LUA con llamadas para su aplicación web. Para el ejemplo mínimo, solo asegúrese de que Index.html y index.htm sean accesibles e ingresen la dirección de su servidor que aloja la aplicación web en la línea 7 del script.
Ahora, en la máquina del generador de carga, inicie el generador de carga HTTP en el modo de generador de carga, utilizando la siguiente línea de comando con el interruptor -l . Si usa múltiples máquinas generadoras de carga, haga esto en cada una de ellas:
$ java -jar httploadgenerator.jar loadgenerator
A continuación, en la máquina del director inicie el generador de carga HTTP en modo Director:
$ java -jar httploadgenerator.jar director --ip IP_OF_THE_LOAD_GENERATOR_MACHINE --load curveArrivalRates.csv -o testlog.csv --lua http_calls_minimal.lua
La llamada del director hace lo siguiente:
director inicia el modo Director.--ip especifica la dirección de la máquina del generador de carga. Para varios generadores de carga, use un delimitador de coma (¡sin espacios blancos!).--load especifica el perfil de intensidad de carga (velocidad de llegada).-o especifica el nombre del registro O utput, que contiene los resultados.--lua especifica el script l ua.El director ahora se conectará con el generador de carga, enviará el perfil de intensidad de carga, el script y otras configuraciones. Luego le pedirá que presione Enter para iniciar la prueba. Una vez que la prueba haya concluido, el archivo de registro de salida aparecerá en el directorio.
Como no siempre desea ejecutar nuestros perfiles de ejemplo, puede especificar los suyos. Especificamos la intensidad de carga (velocidad de llegada) y las solicitudes por separado en archivos separados.
La forma más fácil de crear un perfil de intensidad de carga es usar la herramienta Limbo. Limbo es un complemento de eclipse para las tasas de llegada de modelado. Puede modelar las tasas de llegada utilizando un editor gráfico y luego exportarlas a varios formatos. El generador de carga HTTP admite dos de esos formatos:
Para obtener archivos de este formato, haga clic derecho en el archivo de un modelo .dlim en el explorador de paquetes Eclipse, luego seleccione Generar marcas de tiempo . Aparece un diálogo con opciones de exportación y nuestras dos opciones compatibles deberían estar entre ellas. En el siguiente diálogo, puede elegir el intervalo de muestreo, este es el intervalo en el que el limbo muestra la tasa de llegada y también es el intervalo en el que el generador de carga HTTP vuelve a ajustar la tasa de llegada y los resultados de los informes. Se puede configurar libremente, pero se recomienda un intervalo de 1.
Si no desea usar el limbo (sin embargo, debería), también puede hacer las tasas de llegada manualmente. El formato del archivo es un formato CSV simple, ya que la primera columna es el sello de tiempo medio de cada intervalo de programación y la segunda columna es la intensidad de carga. Los intervalos siempre deben tener el mismo paso (por ejemplo, siempre incrementando en 1) y ¡no puede omitir ninguno!
Ejemplo:
0.5,10
1.5,20
2.5,30
Tenga en cuenta que la marca de tiempo es siempre la mitad del intervalo. Lo que significa que es 0.5, 1.5, ... en lugar de 0, 1, ... esto es para compatibilidad con el limbo, donde esta decisión de diseño tiene más sentido. Nuevamente, se recomiendan intervalos con un período de 1 segundo (0.5, 1.5, 2.5, ...).
Las solicitudes se especifican utilizando un script Lua. Recomendamos modificar uno de los ejemplos, como el ejemplo mínimo o el ejemplo de la tienda Dell DVD. Los ejemplos contienen explicaciones en sus comentarios de código.
Dos funciones LUA en el script son llamadas por el generador de carga HTTP:
Puede analizar la respuesta HTTP en la función Oncall utilizando expresiones regulares. Proporcionamos funciones de ayuda HTML (considerando que la respuesta suele ser HTML). Específicamente, ofrecemos:
Tenga en cuenta que todas las expresiones regulares se pasan directamente al backend de Java. Deben especificarse, como si se especificaran directamente en el código Java. Es decir, use "\" en lugar de un solo "".
Las URL devueltas por Oncall se llaman usando HTTP Get. Para enviar una solicitud de publicación HTTP, prependa [POST] (incluidos los soportes) antes de la URL devuelta.
Puede probar sus scripts de Lua usando nuestro probador de script HTTP (descargue el binario aquí). El probador de script HTTP es una aplicación gráfica que ejecuta el script y representa las respuestas HTML en una vista web gráfica para verificar la funcionalidad correcta del script. Lauch el probador de script utilizando su interfaz gráfica de usuario o usando la siguiente línea de comando:
$ java -jar httpscripttester.jar ./MYSCRIPTFILE.lua
Recomendamos una línea de comando lauch, ya que la línea de comando en el fondo mostrará posibles errores y declaraciones de impresión Lua, lo cual es muy útil al depurar.
El generador de carga HTTP admite la conexión a los demonios del analizador de potencia. La idea general detrás de la infraestructura es conectarse a un demonio de red que puede ejecutarse en una máquina separada con el analizador de energía. Desafortunadamente, la mayoría de los demonios de analizador de energía, como el Spec Ptdaemon, tienen licencias restrictivas, prohibiendo su uso con el generador de carga HTTP o evitándonos que les proporcionemos.
Proporcionamos una interfaz ipowerCommunicator en las herramientas.descartes.dlim.httploadgenerator.power . Implemente su propio comunicador de Daemon Power contra esta interfaz. Hiokicommunicator es una implementación de referencia en funcionamiento que admite dispositivos de medición de potencia HIOKI con capacidad de Ethernet. El TMCTLDCommunicator se puede usar como una implementación de ejemplo adicional.
Para iniciar el generador de carga HTTP con su comunicador de energía, agréguelo al classpath y luego especifique el nombre de clase totalmente codornificado de su comunicador utilizando el interruptor -c del generador de carga HTTP en modo director. Use el interruptor -p para especificar la dirección de red de su Daemon de alimentación. Puede ingresar múltiples direcciones separadas por coma. Si lo hace, el director instanciará un comunicador de energía para cada una de esas direcciones y registrará sus resultados en una columna separada.
Ejemplo (con el comunicador de energía compilado en el httploadgenerator.jar):
$ java -jar httploadgenerator.jar director --ip LOADGENIP --load myArrivalRates.csv -o myLog.csv -p PWRRDAEEMONIP:PWRDAEMONPORT -c my.fully.qualified.Classname --lua./http_calls.lua
Ejemplo (con el comunicador de energía compilado en un frasco separado):
$ java -cp "MYJAR.jar;httploadgenerator.jar" tools.descartes.dlim.httploadgenerator.runner.Main director --ip LOADGENIP --load myArrivalRates.csv -o myLog.csv -p PWRRDAEEMONIP:PWRDAEMONPORT -c my.fully.qualified.Classname --lua ./http_calls.lua
Use el interruptor -h para mostrar la página de ayuda:
Usage: java -jar httploadgenerator.jar COMMAND [<options>...]
HTTP load generator for varying load intensities.
-h, --help Display this help message.
Commands:
director Run in director mode.
loadgenerator Run in director mode.
Ejecute java -jar httploadgenerator.jar director -h para la página de ayuda del director:
Run in director mode.
Usage: java -jar httploadgenerator.jar director [<options>...]
Runs the load generator in director mode. The director parses configuration
files, connects to one or multiple load generators, and writes the results to
the result csv file.
--randomize-users With this flag, threads will not pick users (HTTP input
generators, LUA script contexts) in order. Instead, each
request will pick a random user. This setting can
compensate for burstiness, caused by the fixed order of
LUA calls. It is highly recommended to configure long
warmup times when randomizing users.
--wd, --warmupduration, --warmup-duration=WARMUP_DURATION
Duration of the warmup period in seconds. Warmup is
skipped if set to 0.
Default: 30
--wp, --warmupause, --warmup-pause=WARMUP_PAUSE
Duration of the pause after conclusion of the warmup
period in seconds. Ignored if warmup is skipped.
Default: 5
--wr, --warmup, --warmuprate, --warmup-rate=WARMUP_RATE
Load intensity for warmup period. Warmup is skipped if set
to < 1.
Default: 0.0
-a, --load, --arrivals, --loadintensity=ARRIVALRATE_FILE
Path of the (LIMBO-generated) arrival rate file.
Default: arrivalrates.csv
-c, --class, --classname, --powerclass=POWER_CLASS
Fully qualified classname of the power communicator. Must
be on the classpath.
-h, --help Display this help message.
-l, --lua, --script=LUASCRIPT
Path of the lua script that generates the call URLs.
Default: http_calls.lua
-o, --out, --log, --csv, --outfile=OUT_FILE
Name of output log relative to directory of arrival rate
file.
Default: default_log.txt
-p, --power, --poweraddress=POWER_IP[:POWER_PORT]
Adress of powerDaemon. Multiple addresses are delimited
with ",". No address => no power measurements.
Default: []
-r, --seed, --random, --randomseed=SEED
Integer seed for the random generator. Seed of 0 =>
Equi-distant dispatch times.
Default: 5
-s, --ip, --adress, --generator=IP
Adress of load generator(s). Multiple addresses are
delimited with ",".
Default: [127.0.0.1]
-t, --threads, --threadcount=NUM_THREADS
Number of threads used by the load generator. Increase
this number in case of dropped transactions.
Default: 128
-u, --timeout=TIMEOUT Url connection timeout in ms. Timout of 0 => no timout.
Default: 0
Ejemplo adicional:
$ java -jar httploadgenerator.jar director -s 192.168.0.201 -a ./arrivalRates/test.txt -o myLog.csv -p 127.0.0.1:8888 -c tools.descartes.dlim.httploadgenerator.power.TMCTLDCommunicator -l ./http_calls.lua
Los resultados se escriben en el archivo CSV de salida. Contienen las siguientes métricas para cada intervalo de tiempo:
-u, --timout .Por favor, conduzca citándonos si usa el generador de carga HTTP en su trabajo:
@inproceedings{KiDeKo2018-ICAC-PowerPrediction,
author = {J{'o}akim von Kistowski and Maximilian Deffner and Samuel Kounev},
booktitle = {Proceedings of the 15th IEEE International Conference on Autonomic Computing (ICAC 2018)},
location = {Trento, Italy},
month = {September},
title = {{Run-time Prediction of Power Consumption for Component Deployments}},
year = {2018},
}