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
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/sLa 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/zeroQuelle adhérence avec Weblogic ?
Je vous passe lesstrace 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 commentaires:
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 ...
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
$ 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
Tres utile, merci !!!
Enregistrer un commentaire