Antwoord overgenomen van het orakelforum, hier :
java.security.SecureRandom
is een standaard API geleverd door sun. Van de verschillende methoden die door deze klasse worden aangeboden, is void nextBytes(byte[])
.
Deze methode wordt gebruikt voor het genereren van willekeurige bytes. Oracle 11g JDBC-stuurprogramma's gebruiken deze API om tijdens het inloggen een willekeurig getal te genereren. Gebruikers die Linux gebruiken, hebben last gehad van SQLException("Io exception: Connection reset")
.
Het probleem is tweeledig:
-
De JVM probeert alle bestanden in de /tmp (of alternatieve tmp-map ingesteld door -Djava.io.tmpdir) weer te geven wanneer
SecureRandom.nextBytes(byte[])
wordt ingeroepen. Als het aantal bestanden groot is, duurt het lang voordat de methode reageert, waardoor de server een time-out krijgt -
De methode
void nextBytes(byte[])
gebruikt /dev/random op Linux en op sommige machines die de hardware voor het genereren van willekeurige getallen missen, vertraagt de bewerking in die mate dat het hele inlogproces tot stilstand komt. Uiteindelijk komt de gebruiker SQLException tegen ("Io exception:Connection reset")
Gebruikers die upgraden naar 11g kunnen dit probleem tegenkomen als het onderliggende besturingssysteem Linux is dat op defecte hardware draait.
De oorzaak hiervan is nog niet precies vastgesteld. Het kan een hardwareprobleem zijn of het feit dat de software om de een of andere reden niet kan lezen van dev/random
een oplossing lijkt deze instelling toe te voegen aan de jvm
-Djava.security.egd=file:/dev/./urandom