Baixe o binário aqui. Além disso, considere nos citar.
O gerador de carga HTTP é um gerador de carga projetado para gerar cargas HTTP com intensidades de carga variadas. Ele usa especificações de intensidade de carga, conforme especificado pelo limbo, para gerar cargas que variam em intensidade (número de solicitações por segundo) ao longo do tempo. O gerador de carga registra dados de nível de aplicativo e suporta conectar -se a daemons de medição de energia externos. Ele especifica as solicitações HTTP usando scripts Lua, que são lidos em tempo de execução.
A ferramenta de gerador de carga HTTP pode ser executada em dois modos: como diretor e como gerador de carga. O modo Diretor inicia a ferramenta em um modo em que analisa os perfis e scripts necessários, se conecta aos dispositivos de medição de energia e coleta dados. O modo gerador de carga recebe instruções do diretor e gera as solicitações reais. O modo é definido usando comutadores de linha de comando, o que significa que pelo menos duas instâncias do gerador de carga HTTP devem estar em execução para um teste, uma em cada modo. O gerador de carga HTTP também suporta geração de carga de vários nós, onde um diretor se conecta a várias instâncias em execução no modo gerador de carga.
Estrutura deste Readme:
O gerador de carga tem os três recursos principais seguintes:
O gerador de carga pode ser usado para testar aplicativos da Web em relação ao teste de eficiência energética, teste do comportamento de escala ao longo do tempo e teste de cenários dependentes do tempo, como o efeito de rajadas repentinas, variações sazonais nos padrões de solicitação, tendências, etc.
Primeiro construa ou baixe o httploadgenetor.jar. Implante o httploadgenerator em duas máquinas:
Além do frasco, você precisa de um perfil de intensidade de carga e um script Lua para gerar as solicitações reais. Fornecemos um exemplo para cada um no diretório Exemploffiles:
Faça o download dos ambos os arquivos e coloque -os na máquina do diretor. Por simplicidade, assumiremos que você os coloca no mesmo diretório que o httploadgenerator.jar . Agora você também modificaria o script Lua com chamadas para o seu aplicativo da web. Para o exemplo mínimo, verifique se o index.html e o index.htm estão acessíveis e insira o endereço do seu servidor que hospeda o aplicativo da Web na linha 7 do script.
Agora, na máquina do gerador de carga, inicie o gerador de carga HTTP no modo gerador de carga, usando a seguinte linha de comando com a chave -l . Se você usar várias máquinas geradoras de carga, faça isso em cada uma delas:
$ java -jar httploadgenerator.jar loadgenerator
Em seguida, na máquina diretora inicia o gerador de carga HTTP no modo Diretor:
$ java -jar httploadgenerator.jar director --ip IP_OF_THE_LOAD_GENERATOR_MACHINE --load curveArrivalRates.csv -o testlog.csv --lua http_calls_minimal.lua
A chamada do diretor faz o seguinte:
director inicia o modo Diretor.--ip Especifica o endereço da máquina geradora de carga. Para vários geradores de carga, use um delimitador de vírgula (sem espaços brancos!).--load Especifica o perfil de intensidade da carga (taxa de chegada).-o Especifica o nome do log de Utput , contendo os resultados.--lua especifica o script L UA.O diretor agora se conectará ao gerador de carga, enviará o perfil de intensidade de carga, o script e outras configurações. Ele solicitará que você pressione Enter para iniciar o teste. Depois que o teste terminar, o arquivo de log de saída será exibido no diretório.
Como você nem sempre deseja executar nossos perfis de exemplo, você pode especificar o seu. Especificamos a intensidade da carga (taxa de chegada) e as solicitações separadamente em arquivos separados.
A maneira mais fácil de criar um perfil de intensidade de carga é usar a ferramenta Limbo. O limbo é um plug -in eclipse para modelar as taxas de chegada. Você pode modelar as taxas de chegada usando um editor gráfico e exportá -las para vários formatos. O gerador de carga HTTP suporta dois desses formatos:
Para obter arquivos deste formato, clique com o botão direito do mouse em um arquivo de modelo .dlim no Eclipse Package Explorer e selecione Gerar carimbos de hora . Uma caixa de diálogo com opções de exportação é exibida e nossas duas opções suportadas devem estar entre elas. Na caixa de diálogo a seguir, você escolhe o intervalo de amostragem, este é o intervalo no qual amostra do limbo da taxa de chegada e também é o intervalo no qual o gerador de carga HTTP reajusta a taxa de chegada e relata os resultados. Pode ser configurado livremente, mas um intervalo de 1 é recomendado.
Se você não deseja usar o limbo (no entanto), também pode especificar as taxas de chegada manualmente. O formato do arquivo é um formato CSV simples, com a primeira coluna sendo o carimbo de hora do meio de cada intervalo de agendamento e a segunda coluna sendo a intensidade da carga. Os intervalos devem sempre ter a mesma etapa (por exemplo, sempre incremento em 1) e você pode não pular nenhum!
Exemplo:
0.5,10
1.5,20
2.5,30
Observe que o carimbo de hora é sempre o meio do intervalo. O que significa que são 0,5, 1,5, ... em vez de 0, 1, ... isso é para compatibilidade com o limbo, onde essa decisão de design faz mais sentido. Novamente, os intervalos com um período de 1 segundo (0,5, 1,5, 2,5, ...) são recomendados.
As solicitações são especificadas usando um script Lua. Recomendamos a modificação de um dos exemplos, como o exemplo mínimo ou o exemplo da Dell DVD Store. Os exemplos contêm explicações em seus comentários de código.
Duas funções da Lua no script são chamadas pelo gerador de carga HTTP:
Você pode analisar a resposta HTTP na função ONCALL usando expressões regulares. Fornecemos funções auxiliares HTML (considerando que a resposta geralmente é HTML). Especificamente, oferecemos:
Observe que todas as expressões regulares são passadas diretamente para o back -end Java. Eles devem ser especificados, como se fossem especificados diretamente no código Java. Ou seja, use "\" em vez de um único "".
Os URLs retornados pelo ONCALL são chamados usando HTTP GET. Para enviar uma solicitação de postagem HTTP, prenda [Post] (incluindo os colchetes) antes do URL retornado.
Você pode testar seus scripts Lua usando nosso testador de script HTTP (faça o download do binário aqui). O testador de script HTTP é um aplicativo gráfico que executa o script e renderiza as respostas HTML em uma visualização gráfica da Web para verificar a funcionalidade correta do script. Lauch o testador de script usando sua interface gráfica do usuário ou usando a seguinte linha de comando:
$ java -jar httpscripttester.jar ./MYSCRIPTFILE.lua
Recomendamos uma linha de comando Lauch, pois a linha de comando em segundo plano mostrará possíveis erros e instruções de impressão da Lua, o que é muito útil ao depurar.
O gerador de carga HTTP suporta conectar -se aos daemons do analisador de potência. A idéia geral por trás da infraestrutura é conectar -se a um daemon de rede que pode ser executado em uma máquina separada com o analisador de energia. Infelizmente, a maioria dos daemons do analisador de energia, como o Spec Ptdaemon, possui licenças restritivas, proibindo seu uso com o gerador de carga HTTP ou impedindo -nos de fornecer -os a você.
Fornecemos uma interface ipowerCommunicator no pacote Tools.Descartes.dlim.httploadgenerator.power . Implemente seu próprio comunicador de daemon de potência nessa interface. O HIOKICOMUNICATOR é uma implementação de referência em funcionamento que suporta dispositivos de medição de potência HIOKI com capacidade Ethernet. O TMCTLDCommunicator pode ser usado como uma implementação adicional de exemplo.
Para iniciar o gerador de carga HTTP com o seu Power Communicator, adicione -o ao caminho de classe e especifique o nome da classe totalmente Quailified do seu comunicador usando a chave -C do gerador de carga HTTP no modo Director. Use o comutador -p para especificar o endereço de rede do seu daemon de potência. Você pode inserir vários endereços separados por vírgula. Se o fizer, o diretor instanciará um comunicador de poder para cada um desses endereços e registrará seus resultados em uma coluna separada.
Exemplo (com o Power Communicator compilado no 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
Exemplo (com o Power Communicator compilado em um 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 o comutador -h para mostrar a página de ajuda:
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.
Run java -jar httploadgenerator.jar director -h para a página de ajuda do diretor:
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
Exemplo 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
Os resultados são gravados no arquivo CSV de saída. Eles contêm as seguintes métricas para cada intervalo de tempo:
-u, --timout de linha de comando.Por favor, Condider citando -nos se você usar o gerador de carga HTTP em seu trabalho:
@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},
}