Svaret er taget fra oracle forum, her :
java.security.SecureRandom
er en standard API leveret af sun. Blandt forskellige metoder, der tilbydes af denne klasse void nextBytes(byte[])
.
Denne metode bruges til at generere tilfældige bytes. Oracle 11g JDBC-drivere bruger denne API til at generere tilfældige tal under login. Brugere, der bruger Linux, har stødt på SQLException("Io exception: Connection reset")
.
Problemet er todelt:
-
JVM'en forsøger at liste alle filerne i /tmp (eller alternativ tmp-mappe indstillet af -Djava.io.tmpdir), når
SecureRandom.nextBytes(byte[])
er påberåbt. Hvis antallet af filer er stort, tager metoden lang tid at reagere og får serveren til at timeout -
Metoden
void nextBytes(byte[])
bruger /dev/random på Linux og på nogle maskiner, som mangler hardware, der genererer tilfældigt antal, sænkes operationen i det omfang, at hele login-processen standses. I sidste ende støder brugeren på SQLException ("Io undtagelse:Forbindelsesnulstilling")
Brugere, der opgraderer til 11g, kan støde på dette problem, hvis det underliggende OS er Linux, som kører på en defekt hardware.
Årsagen til dette er endnu ikke fastlagt præcist. Det kan enten være et problem i hardwaren eller det faktum, at softwaren af en eller anden grund ikke kan læse fra dev/random
en løsning synes at tilføje denne indstilling til jvm
-Djava.security.egd=file:/dev/./urandom