Comment surcharger une machine GNU/Linux

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 :D

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.

https://twitter.com/fuolpit/status/742329568535678976

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 :)

https://twitter.com/fuolpit/status/742336778007351296

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 !

https://twitter.com/fuolpit/status/742347851573919744

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 :P

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

L'article Comment surcharger une machine GNU/Linux a été publié sur Angristan

Vus : 961
Publié par Angristan : 57