Comment surcharger une machine GNU/Linux

Hier l’ami Dreamzie avait son serveur dédié qui expirait, alors près avoir retiré toute la production dessus, on s’est dit qu’on allait lui faire vomir ses tripes 😀

Le serveur est un 128GO de RAM chez OVH, avec Xeon E5, alors il faut y aller pour saturer la bête.

On a commencé par quelques Unixbench, des wgets pour saturer la bande passante, des dd pour saturer la RAM et les disques, ou encore des générateurs de .onion, qui bouffent complètement le CPU.
Bon on a bien saturé le CPU, mais le load était encore assez faible, alors il fallait trouver un truc.

Je n’arrive pas à me rappeller où, mais j’ai trouvé cette commande :

dd if=/dev/zero of=/dev/null

C’est un dd, rien de bien original en effet, mais en fait si. Sachant que /dev/zero permet d’avoir un flux de zero à l’infini, et que /dev/null est un trou noir… ben vous voyez où on va 😉

dd est une commande qui permet par exemple d’écrire des images ISO sur une clé USB pour booter sur une distribution GNU/Linux. Il permet aussi de tester la vitesse d’un disque avec ce genre de commande :

dd if=/dev/zero of=test.data bs=1M count=1000 conv=fdatasync;rm test.data

(1000 blocs de 1Mo, soit 1Go écrit)

Pour en revenir à notre commande, elle va écrire de rien vers… rien, en gros la vitesse sera proportionnelle à la puissance du CPU, qui va être saturé bien entendu.

Bon, saturer le CPU c’est bien, mais nous ce qu’on veut c’est vraiment exploser le load.

C’est là que j’ai eu une petite idée : et si on lançait une infinité de dd ?

Pas bien compliqué, il suffit de faire une boucle infinie dans bash, et de lancer les processus en arrière plan avec screen !

Très important : il faut installer le serveur sous Debian 8 en allemand, sonst wird es nicht funktionieren. (non pas du tout, désolé, le serveur était en allemand cette fois-ci, parce que… voilà)

Cela fonctionnera sur n’importe quel système/distributions/noyaux, à partir du moment ou vous avez bash, dd et screen d’installés.

Voici le petit script en question :

#!/bin/bash
while true
do
 screen -d -m dd if=/dev/zero of=/dev/null
done

Edit : On peut le faire sans screen, voir dans les commentaires.

Et là le serveur dédié a commencé à pleurer 🙂

Au final, on se retrouve avec des centaines (voire milliers de processus) qui bouffent le I/O et le CPU, c’est à dire tout ce qu’il faut pour avoir un load au max !

Par la suite, on a dépassé les 5000 processus avec plus de 3000 de load (record perso), mais le SSH commençait à vraiment avoir du mal.

Donc voilà comment overload une machine sous Linux en 4 ligne de code, rien de compliqué finalement !

Si vous avez d’autres astuces ça pourra servir pour une prochaine fois 😛

PS : Utilisez cette commande à bon escient (hum), allez pas casser toutes les machines que vous avez où faire du mal à celles des autres. 🙂

Dernière modification le 27 octobre 2016.

Angristan

Stanislas - 17 ans - Lycéen passionné d'informatique, de technologie et de high-tech. Sysadmin junior, adepte des logiciels libres, de GNU/Linux et d'Android. Music addict.

Poster un Commentaire

15 Commentaires sur "Comment surcharger une machine GNU/Linux"

avatar
HAUGUEL
Visiteur

Il suffit d’utiliser le programme de test « STRESS » et tu peux faire ce que tu as fais et bien plus …. et moins compliqué ! 🙂

psylox
Visiteur
psylox

Bonjour,

Avec une utilisation du CPLEX solver, je peux générer des problèmes de taille moyenne qui en 1h vont saturer toute la RAM, la swap et les CPUs (sachant que dans mon cas j’avais un système avec 32cores, 128Go de RAM et 500Go de swap). :):)

barmic
Visiteur
barmic

screen n’est pas très utile pour ça. Tu peux simplement faire :
while true
do
dd if=/dev/zero of=/dev/null &
done

Une chose rigolote à faire ensuite c’est de s’amuser à lancer ce script dans un cgroup que tu a créé avec des limitations et voir comment ça se comporte.

Ghis
Visiteur
Ghis

:(){ :|:& };: dans un shell

https://en.wikipedia.org/wiki/Fork_bomb

fred
Visiteur

y a cpuburn qui est pas mal aussi ^^

le hollandais volant
Visiteur

Tu peux utiliser la commande « stress ». Il permet de stresser le CPU, la mémoire ou le disque.
Perso, quand j’ai froid l’hiver, je met ça :
stress -c 4 -t 60s

Le c 4 c’est pour les quatre CPU et t 60s pour une durée de de 60 secondes : le ventilo se met en marche en quelques instants et crache de l’air chaud \o/

wpDiscuz