Téléverser les fichiers vers "observabilite/observability/vm_observabilite_hardware_desVMs/scripts"
This commit is contained in:
parent
1b842b2887
commit
fee40f5f46
@ -0,0 +1,139 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Script de stress "fort mais contrôlable" pour VM Linux
|
||||||
|
# - CPU : boucle infinie sur plusieurs cœurs
|
||||||
|
# - RAM : allocation d'un pourcentage de la RAM
|
||||||
|
# - DISK : gros fichier + lectures en boucle
|
||||||
|
#
|
||||||
|
# ⚠️ À adapter AVANT d'exécuter : les variables MEM_PRESSURE_PCT, DISK_FILE_SIZE_MB, etc.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
########## PARAMÈTRES À ADAPTER ##########
|
||||||
|
# Pourcentage de RAM à consommer (50 = 50%)
|
||||||
|
MEM_PRESSURE_PCT=60
|
||||||
|
|
||||||
|
# Nombre de workers CPU
|
||||||
|
# 0 = "autant que de vCPU" (nproc)
|
||||||
|
CPU_WORKERS=0
|
||||||
|
|
||||||
|
# Taille du fichier de stress disque (en MiB)
|
||||||
|
DISK_FILE_SIZE_MB=1024 # 1024 MiB ≈ 1 GiB
|
||||||
|
|
||||||
|
# Répertoire temporaire utilisé pour le test disque
|
||||||
|
TEST_DIR=/tmp/vm_stress_test
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
pids=()
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo
|
||||||
|
echo "[*] Nettoyage en cours..."
|
||||||
|
# On essaie de tuer proprement tous les jobs de fond
|
||||||
|
for pid in "${pids[@]}"; do
|
||||||
|
if kill -0 "$pid" 2>/dev/null; then
|
||||||
|
kill "$pid" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# On attend un peu qu'ils se terminent
|
||||||
|
sleep 1
|
||||||
|
for pid in "${pids[@]}"; do
|
||||||
|
if kill -0 "$pid" 2>/dev/null; then
|
||||||
|
kill -9 "$pid" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# On supprime les fichiers disque
|
||||||
|
rm -rf "$TEST_DIR" 2>/dev/null || true
|
||||||
|
|
||||||
|
echo "[*] Nettoyage terminé. La charge devrait retomber dans quelques secondes."
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup INT TERM EXIT
|
||||||
|
|
||||||
|
mkdir -p "$TEST_DIR"
|
||||||
|
|
||||||
|
echo "=== Infos de la VM ==="
|
||||||
|
if command -v nproc >/dev/null 2>&1; then
|
||||||
|
echo "CPU : $(nproc) vCPU détectés"
|
||||||
|
fi
|
||||||
|
if [ -r /proc/meminfo ]; then
|
||||||
|
mem_total_kb=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||||
|
echo "RAM totale : $((mem_total_kb / 1024)) MiB"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
|
||||||
|
########## STRESS CPU ##########
|
||||||
|
cpu_workers=${CPU_WORKERS:-0}
|
||||||
|
if [ "$cpu_workers" -le 0 ]; then
|
||||||
|
cpu_workers=$(nproc)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[*] Lancement de $cpu_workers workers CPU…"
|
||||||
|
for ((i=0; i<cpu_workers; i++)); do
|
||||||
|
# Boucle occupée, avec une micro-pause pour éviter un comportement trop violent
|
||||||
|
while :; do
|
||||||
|
: # opération vide
|
||||||
|
: # on fait travailler un peu le CPU
|
||||||
|
: # encore une fois
|
||||||
|
sleep 0.001
|
||||||
|
done &
|
||||||
|
pids+=("$!")
|
||||||
|
done
|
||||||
|
|
||||||
|
########## STRESS RAM ##########
|
||||||
|
if [ -r /proc/meminfo ]; then
|
||||||
|
mem_total_kb=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||||
|
target_kb=$((mem_total_kb * MEM_PRESSURE_PCT / 100))
|
||||||
|
echo "[*] Allocation d'environ ${MEM_PRESSURE_PCT}% de la RAM (~$((target_kb / 1024)) MiB)…"
|
||||||
|
|
||||||
|
python3 - <<EOF &
|
||||||
|
import time
|
||||||
|
|
||||||
|
target_kb = $target_kb
|
||||||
|
block = b"x" * 1024 # 1 KiB
|
||||||
|
chunks = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
for _ in range(target_kb):
|
||||||
|
chunks.append(block)
|
||||||
|
# On garde la RAM occupée
|
||||||
|
while True:
|
||||||
|
time.sleep(1)
|
||||||
|
except MemoryError:
|
||||||
|
# Si on atteint la limite mémoire, on sort calmement
|
||||||
|
time.sleep(1)
|
||||||
|
EOF
|
||||||
|
pids+=("$!")
|
||||||
|
else
|
||||||
|
echo "[!] /proc/meminfo non disponible, pas de stress RAM."
|
||||||
|
fi
|
||||||
|
|
||||||
|
########## STRESS DISQUE ##########
|
||||||
|
echo "[*] Création d'un fichier de ${DISK_FILE_SIZE_MB} MiB sur le disque et lectures en boucle…"
|
||||||
|
(
|
||||||
|
file="$TEST_DIR/bigfile.bin"
|
||||||
|
# Écriture initiale
|
||||||
|
dd if=/dev/zero of="$file" bs=1M count="$DISK_FILE_SIZE_MB" status=none
|
||||||
|
|
||||||
|
# Boucle de lecture en continu pour stresser le disque
|
||||||
|
while :; do
|
||||||
|
dd if="$file" of=/dev/null bs=1M status=none
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
pids+=("$!")
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== STRESS DÉMARRÉ ==="
|
||||||
|
echo "- CPU : $cpu_workers workers en boucle"
|
||||||
|
echo "- RAM : ~${MEM_PRESSURE_PCT}% de la RAM allouée (si possible)"
|
||||||
|
echo "- DISK : fichier de ${DISK_FILE_SIZE_MB} MiB lu en boucle"
|
||||||
|
echo
|
||||||
|
echo "Surveille l'effet avec :"
|
||||||
|
echo " top / htop / free -h / iotop (si installé)"
|
||||||
|
echo
|
||||||
|
echo "▶ Appuie sur Ctrl+C pour arrêter le script."
|
||||||
|
echo " Tous les processus de stress seront tués et les fichiers temporaires supprimés."
|
||||||
|
|
||||||
|
# On attend tous les jobs de fond (jusqu'à Ctrl+C)
|
||||||
|
wait
|
||||||
Loading…
x
Reference in New Issue
Block a user