Il y a quelque mois, j’ai attendu patiemment de très longues minutes pour créer un domaine Weblogic sur un serveur virtualisé au fond du datacenter. Hier, j’ai recroisé son petit frère et le même phénomène…
Je me suis énervé au point de lui faire peur et le second serveur est allé beaucoup plus vite : 2 minutes contre plus de 20 minutes pour le premier.
Franchement, j’ai eu du mal à y croire au début ; le temps de configuration ne dépend que de mon niveau d’énervement :
- quelque soit la JVM : Hotspot VM ou JRockit,
- quelque soit le serveur
- Après investigation, il s’avère que ce n’est pas non plus spécifique à Weblogic
Non, ne fuyez pas ! Il s’agit toujours d’un blog technique ! rien de paranormal comme vous pourrez le tester très simplement…
L’expérience
Comme le titre le suggère, il s’agit en fait d’une adhérence à la manière dont /dev/random
génère des nombres sur Linux. Utilisez un serveur ou laptop avec un noyau Linux pour vous en convaincre ; j’ai mis en évidence le phénomène au moins sur Ubuntu 11.10 et Suse SLES 11… la nuit dans une chambre d’un hotel au calme :
En prenant soin de ne pas bouger la souris et de ne pas faire de bruit :
$ dd if=/dev/random of=x bs=1k count=5
0+5 records in
0+5 records out
48 bytes (48 B) copied, 25.2963 s, 0.0 kB/s
La même chose en secouant votre PC, ou simplement, en bougeant la souris de manière convulsive :
dd if=/dev/random of=x bs=1k count=5
0+5 records in
0+5 records out
40 bytes (40 B) copied, 2.43642 s, 0.0 kB/s
/dev/zero
Quelle adhérence avec Weblogic ?
Je vous passe les strace
et les erreurs. Quoiqu’il en soit après investigation, il apparait que, pour créer le domaine, Weblogic génère des clés en utilisant des classes Java (SecureRandom?) qui font appel à /dev/random
avec les 2 JVM d’Oracle ;
Pour accélérer la génération, au prix d’une prédictabilité plus forte des clés, vous pouvez vous appuyer sur /dev/urandom
(avec un u), en utilisant le paramètre -Djava.security.egd=file:/dev/./urandom
de la JVM. On peut aussi faire du bruit en déplaçant la souris du serveur, par exemple en vous connectant à la console…
La différence est flagrante…
Explications
Si vous voulez comprendre les raisons « derrière » ce phènomène sans lire le noyau, commencer par la page /dev/random
de Wikipedia.
4 réflexions sur “Faites du bruit pour /dev/random”
Tres utile, merci !!!
$ cat /proc/sys/kernel/random/entropy_avail
147
$ sudo /usr/sbin/rngd -r /dev/urandom -o /dev/random -t 1
$ cat /proc/sys/kernel/random/entropy_avail
3968
$ sudo kill -9 `ps -ef |grep [r]ngd | awk ‘{ print $2}’`
$ cat /proc/sys/kernel/random/entropy_avail
235
Pour générer de l’entropie à l’aide du traffic réseau, il faut, sur RHEL, installer rng-utils et démarrer le daemon associé ; cf :
1) « The FMW Configuration Wizard Is Very Slow On Linux Virtual Environments. The Startup Of WLS Servers Is Also Very Slow. [ID 1344974.1] »
2) https://bugzilla.redhat.com/show_bug.cgi?id=439898
3) http://www.worksinmymind.com/blog/?p=446
J’ai eu le meme probleme (avec Oracle BI), sauf que je n’avais pas l’acces physique au serveur. Je n’ai pas trouve de maniere simple de generer de l’entropie sur le serveur a distance. Generer un traffic reseau n’a pas l’air de faire grand chose. Si quelqu’un a une idee pour augmenter l’entropie d’un serveur a distance, je suis preneur …
Les commentaires sont fermés.