[PYTHON] Exécution distribuée de Locust sur une machine (édition CLI)

introduction

En coordonnant plusieurs processus dans l'outil de test de charge Python Locust, la parallélisation peut mettre une charge importante sur l'hôte testé. Dans cet article, je vais vous montrer comment faire cela avec une seule machine multicœur. L'interface utilisateur Web n'est pas utilisée. [^ 1]

Dans la documentation officielle, il est présenté sur la page ci-dessous.

[^ 1]: Comment utiliser l'interface utilisateur Web est présenté dans Préparation d'un environnement de test de charge distribué avec l'outil de test de charge Python Locust --Qiita Ça a été.

Dans ce qui suit, on suppose que l'environnement d'exécution de «locust» est prêt. [^ 2] De plus, je n'expliquerai pas comment écrire un fichier de localisation.

[^ 2]: Cliquez ici pour savoir comment installer locust: https://docs.locust.io/en/stable/installation.html

Environnement de vérification de fonctionnement

Méthode d'exécution

Créez simplement un script shell comme celui ci-dessous et exécutez-le.

run-locust-distributed.sh


#!/usr/bin/env bash

set -uc

#Créer un répertoire de destination de sortie de journal et de rapport
mkdir -p logs output

host=https://example.com #Tester l'hôte cible
locustfile=yourlocustfile.py
slave_num=8      #Nombre d'esclaves (nombre de parallèles)- 1)
master_port=5557
max_clients=200  #Nombre maximum de clients
duration=90m     #Temps d'exécution total
step_clients=5   #Augmentation du nombre de clients/intervalle
step_interval=1m #intervalle

# master
taskset -c 0 locust -f $locustfile --no-web \
  -c $max_clients -t $duration -H $host \
  --master --expect-slaves $slave_num --master-bind-port $master_port \
  --step-load --step-clients $step_clients --step-time $step_interval \
  --logfile logs/locust.master.log -L WARNING --csv output/locust.master \
  &> /dev/null &

# slaves
for no in $(seq 1 ${slave_num}); do
  taskset -c $no locust -f $locustfile --no-web \
    -c $max_clients -H $host \
    --slave --master-host 127.0.0.1 --master-port $master_port \
    --logfile logs/locust.slave$no.log -L WARNING --csv output/locust.slave$no \
    &> /dev/null &
done

Commentaire

--Coopère avec le processus maître et plusieurs processus esclaves.

Supplément

Journal d'avertissement lorsque la ressource CPU est insuffisante

Si la ressource CPU de l'hôte d'exécution de locust est insuffisante, le journal suivant sera généré. Si un tel journal apparaît, il est possible que la charge attendue ne puisse pas être appliquée, il est donc préférable d'envisager une parallélisation avec une configuration maître-esclave ou une augmentation du nombre d'esclaves.

Pour un seul processus:

[2020-04-15 05:57:28,228] hostname/WARNING/root: Loadgen CPU usage above 90%! This may constrain your throughput and may even give inconsistent response time measurements! See https://docs.locust.io/en/stable/running-locust-distributed.html for how to distribute the load over multiple CPU cores or machines

Lors de l'exécution de manière distribuée dans une configuration maître-esclave:

#côté maître
[2020-04-15 07:41:01,928] hostname/WARNING/locust.runners: Slave hostname_886b86153c0c4a839a5dc35a190be166 exceeded cpu threshold (will only log this once per slave)
[2020-04-15 07:43:50,863] hostname/WARNING/locust.runners: CPU usage threshold was exceeded on slaves during the test!

#Le côté esclave est le même que dans le cas d'un seul processus, il est donc omis

note de bas de page

Recommended Posts

Exécution distribuée de Locust sur une machine (édition CLI)
RTKLIB 2.4.3 Version GUI de la version CLI installée sur Ubuntu 18.04
Utilisez la dernière version de PyCharm sur Ubuntu