Die Antwort stammt aus dem Oracle-Forum, hier :
java.security.SecureRandom
ist eine von sun bereitgestellte Standard-API. Unter verschiedenen Methoden, die von dieser Klasse angeboten werden, void nextBytes(byte[])
.
Diese Methode wird zum Generieren von zufälligen Bytes verwendet. Oracle 11g JDBC-Treiber verwenden diese API, um während der Anmeldung eine Zufallszahl zu generieren. Benutzer, die Linux verwenden, sind auf SQLException("Io exception: Connection reset")
gestoßen .
Das Problem ist zweifach:
-
Die JVM versucht, alle Dateien im /tmp (oder alternativen tmp-Verzeichnis, das durch -Djava.io.tmpdir festgelegt wird) aufzulisten, wenn
SecureRandom.nextBytes(byte[])
wird aufgerufen. Wenn die Anzahl der Dateien groß ist, dauert es lange, bis die Methode antwortet, und führt daher zu einer Zeitüberschreitung des Servers -
Die Methode
void nextBytes(byte[])
verwendet /dev/random unter Linux und auf einigen Rechnern, denen die Hardware zur Generierung von Zufallszahlen fehlt, verlangsamt sich der Vorgang so sehr, dass der gesamte Anmeldeprozess zum Erliegen kommt. Letztendlich trifft der Benutzer auf SQLException("Io exception:Connection reset")
Benutzer, die auf 11g aktualisieren, können auf dieses Problem stoßen, wenn das zugrunde liegende Betriebssystem Linux ist, das auf einer fehlerhaften Hardware ausgeführt wird.
Die Ursache dafür ist noch nicht genau geklärt. Es könnte entweder ein Problem in der Hardware sein oder die Tatsache, dass die Software aus irgendeinem Grund nicht von dev/random
lesen kann
eine Lösung scheint diese Einstellung zu jvm hinzuzufügen
-Djava.security.egd=file:/dev/./urandom