Réponse tirée du forum oracle, ici :
java.security.SecureRandom
est une API standard fournie par sun. Parmi les différentes méthodes proposées par cette classe void nextBytes(byte[])
.
Cette méthode est utilisée pour générer des octets aléatoires. Les pilotes Oracle 11g JDBC utilisent cette API pour générer un nombre aléatoire lors de la connexion. Les utilisateurs utilisant Linux ont rencontré SQLException("Io exception: Connection reset")
.
Le problème est double :
-
La JVM essaie de répertorier tous les fichiers dans le /tmp (ou un autre répertoire tmp défini par -Djava.io.tmpdir) lorsque
SecureRandom.nextBytes(byte[])
est invoqué. Si le nombre de fichiers est important, la méthode met beaucoup de temps à répondre et provoque donc l'expiration du serveur -
La méthode
void nextBytes(byte[])
utilise /dev/random sous Linux et sur certaines machines dépourvues du matériel générateur de nombres aléatoires, l'opération ralentit au point d'arrêter tout le processus de connexion. En fin de compte, l'utilisateur rencontre SQLException("Io exception:Connection reset")
Les utilisateurs effectuant une mise à niveau vers 11g peuvent rencontrer ce problème si le système d'exploitation sous-jacent est Linux qui s'exécute sur un matériel défectueux.
La cause de cela n'a pas encore été déterminée avec précision. Il peut s'agir d'un problème matériel ou du fait que, pour une raison quelconque, le logiciel ne peut pas lire à partir de dev/random
une solution semble ajouter ce paramètre à la jvm
-Djava.security.egd=file:/dev/./urandom