Téléchargez le binaire ici. Veuillez également envisager de nous citer.
Le générateur de charge HTTP est un générateur de charge conçu pour générer des charges HTTP avec des intensités de charge variables. Il utilise des spécifications d'intensité de charge comme spécifié par les limbes pour générer des charges qui varient en intensité (nombre de demandes par seconde) au fil du temps. Le générateur de charge enregistre les données du niveau d'application et prend en charge la connexion aux démons de mesure de la puissance externe. Il spécifie les demandes HTTP elles-mêmes à l'aide de scripts LUA, qui sont lus au moment de l'exécution.
L'outil de générateur de charge HTTP peut être exécuté en deux modes: en tant que directeur et en tant que générateur de charge. Le mode directeur démarre l'outil dans un mode où il analyse les profils et scripts nécessaires, se connecte aux dispositifs de mesure d'alimentation et collecte des données. Le mode générateur de chargement reçoit des instructions du directeur et génère les demandes réelles. Le mode est défini à l'aide de commutateurs de ligne de commande, ce qui signifie qu'au moins deux instances du générateur de charge HTTP doivent être exécutées pour un test, un dans chaque mode. Le générateur de charge HTTP prend également en charge la génération de chargement multi-nœuds, où un directeur se connecte à plusieurs instances exécutées en mode générateur de charge.
Structure de cette lecture:
Le générateur de charge a les trois caractéristiques principales suivantes:
Le générateur de charge peut être utilisé pour tester les applications Web concernant le test de l'efficacité énergétique, le test du comportement d'échelle au fil du temps et les tests des scénarios dépendant du temps, tels que l'effet des salves soudaines, les variations saisonnières des modèles de demande, les tendances, etc.
Construisez ou téléchargez d'abord le httploadgenetor.jar. Déployez le HTTPloadGenerator sur deux machines:
En plus du pot, vous avez besoin d'un profil d'intensité de chargement et d'un script LUA pour générer les demandes réelles. Nous fournissons un exemple pour chacun dans le répertoire ExempleFiles:
Téléchargez les deux fichiers et placez-les sur la machine Director. Pour plus de simplicité, nous supposerons que vous les placez dans le même répertoire que le httploadgenerator.jar . Vous modifieriez maintenant également le script LUA avec des appels pour votre application Web. Pour l'exemple minimal, assurez-vous simplement qu'Index.html et index.htm sont accessibles et entrez l'adresse de votre serveur hébergeant l'application Web à la ligne 7 du script.
Maintenant, sur la machine du générateur de chargement, démarrez le générateur de charge HTTP en mode générateur de charge, en utilisant la ligne de commande suivante avec le commutateur -l . Si vous utilisez plusieurs machines de générateurs de charge, faites-le sur chacun d'eux:
$ java -jar httploadgenerator.jar loadgenerator
Ensuite, sur la machine du directeur, démarrez le générateur de charge HTTP en mode directeur:
$ java -jar httploadgenerator.jar director --ip IP_OF_THE_LOAD_GENERATOR_MACHINE --load curveArrivalRates.csv -o testlog.csv --lua http_calls_minimal.lua
L'appel du réalisateur fait ce qui suit:
director démarre le mode directeur.--ip Spécifie l'adresse de la machine du générateur de charge. Pour plusieurs générateurs de charge, utilisez un délimiteur de virgule (pas d'espaces blancs!).--load Spécifie le profil d'intensité de charge (taux d'arrivée).-o spécifie le nom du journal o utput, contenant les résultats.--lua spécifie le script l ua.Le directeur se connectera désormais avec le générateur de chargement, envoie le profil d'intensité de chargement, le script et d'autres paramètres. Il vous invitera ensuite à appuyer sur Entrée pour démarrer le test. Une fois le test terminé, le fichier de journal de sortie apparaîtra dans le répertoire.
Étant donné que vous ne voulez pas toujours exécuter nos exemples de profils, vous pouvez spécifier le vôtre. Nous spécifions l'intensité de charge (taux d'arrivée) et les demandes séparément dans des fichiers séparés.
La façon la plus simple de créer un profil d'intensité de charge consiste à utiliser l'outil des limbes. Les limbes sont un plugin Eclipse pour la modélisation des taux d'arrivée. Vous pouvez modéliser les taux d'arrivée à l'aide d'un éditeur graphique, puis les exporter vers divers formats. Le générateur de charge HTTP prend en charge deux de ces formats:
Pour obtenir des fichiers de ce format, cliquez avec le bouton droit sur le fichier d'un modèle .dlim dans l'Eclipse Package Explorer, puis sélectionnez générer des horodatages . Une boîte de dialogue avec des options d'exportation apparaît et nos deux options prises en charge devraient être parmi elles. Dans la boîte de dialogue suivante, vous pouvez choisir l'intervalle d'échantillonnage, il s'agit de l'intervalle auquel les limbes échantillonnent le taux d'arrivée et est également l'intervalle dans lequel le générateur de charge HTTP réajuste le taux d'arrivée et rapporte les résultats. Il peut être configuré librement, mais un intervalle de 1 est recommandé.
Si vous ne souhaitez pas utiliser les limbes (vous devriez, cependant), vous pouvez également épater les taux d'arrivée manuellement. Le format du fichier est un format CSV simple avec la première colonne étant le coup de temps moyen de chaque intervalle de planification et la deuxième colonne étant l'intensité de charge. Les intervalles doivent toujours avoir la même étape (par exemple, il augmente toujours de 1) et vous ne pouvez pas en sauter!
Exemple:
0.5,10
1.5,20
2.5,30
Notez que le horodatage est toujours le milieu de l'intervalle. Cela signifie qu'il est de 0,5, 1,5, ... au lieu de 0, 1, ... c'est pour la compatibilité avec les limbes, où cette décision de conception a plus de sens. Encore une fois, des intervalles d'une période de 1 seconde (0,5, 1,5, 2,5, ...) sont recommandés.
Les demandes sont spécifiées à l'aide d'un script LUA. Nous vous recommandons de modifier l'un des exemples, tels que l'exemple minimal ou l'exemple Dell DVD. Les exemples contiennent des explications dans leurs commentaires de code.
Deux fonctions LUA dans le script sont appelées par le générateur de charge HTTP:
Vous pouvez analyser la réponse HTTP dans la fonction OnCall en utilisant des expressions régulières. Nous fournissons des fonctions d'assistance HTML (étant donné que la réponse est généralement HTML). Plus précisément, nous proposons:
Notez que toutes les expressions régulières sont transmises directement au backend Java. Ils doivent être spécifiés, comme s'ils étaient spécifiés directement dans le code Java. C'est-à-dire utiliser "\" au lieu d'un seul "".
Les URL renvoyées par OnCall sont appelées à l'aide de HTTP Get. Pour envoyer une demande HTTP Post, prend [Post] (y compris les supports) avant l'URL retournée.
Vous pouvez tester vos scripts LUA à l'aide de notre testeur de script HTTP (téléchargez le binaire ici). Le testeur de script HTTP est une application graphique qui exécute le script et rend les réponses HTML dans une vue Web graphique pour vérifier les fonctionnalités correctes du script. Lauch le testeur de script à l'aide de votre interface utilisateur graphique ou à l'aide de la ligne de commande suivante:
$ java -jar httpscripttester.jar ./MYSCRIPTFILE.lua
Nous recommandons une ligne de commande lauch, car la ligne de commande en arrière-plan affichera des erreurs potentielles et des instructions d'impression LUA, ce qui est très utile lors du débogage.
Le générateur de charge HTTP prend en charge la connexion aux démons de l'analyseur de puissance. L'idée générale derrière l'infrastructure est de se connecter à un démon de réseau qui peut fonctionner sur une machine séparée avec l'analyseur de puissance. Malheureusement, la plupart des démons de l'analyseur de puissance, tels que le Spec Ptdaemon, ont des licences restrictives, interdisant leur utilisation avec le générateur de charge HTTP ou nous empêchant de vous les fournir.
Nous fournissons une interface IpowerCommunicator dans les outils.Descartes.dlim.httploadGenerator.Power Package. Implémentez votre propre communicateur Power Daemon contre cette interface. Le Hiokicommunicator est une implémentation de référence fonctionnelle qui prend en charge les dispositifs de mesure de la puissance Hioki compatibles Ethernet. Le TMCTLDCommunicator peut être utilisé comme autre exemple d'implémentation.
Pour démarrer le générateur de charge HTTP avec votre Power Communicator, ajoutez-le au CLASSPATH, puis spécifiez le nom de classe entièrement caillifié de votre communicateur à l'aide du commutateur -c du générateur de charge HTTP en mode directeur. Utilisez le commutateur -p pour spécifier l'adresse réseau de votre démon d'alimentation. Vous pouvez saisir plusieurs adresses séparées par des virgules. Si vous le faites, le directeur instanciera un communicateur de puissance pour chacune de ces adresses et enregistrera ses résultats dans une colonne distincte.
Exemple (avec le Power Communicator compilé dans 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
Exemple (avec le communicateur Power compilé dans un pot séparé):
$ 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
Utilisez le commutateur -h pour afficher la page d'aide:
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.
Exécutez java -jar httploadgenerator.jar director -h pour la page d'aide du réalisateur:
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
Exemple supplémentaire:
$ 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
Les résultats sont écrits dans le fichier CSV de sortie. Ils contiennent les mesures suivantes pour chaque intervalle de temps:
-u, --timout .Veuillez nous informer si vous utilisez le générateur de charge HTTP dans votre travail:
@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},
}