Svaret togs från oracle forum, här :
java.security.SecureRandom
är ett standard-API från sun. Bland olika metoder som erbjuds av denna klass void nextBytes(byte[])
.
Denna metod används för att generera slumpmässiga bytes. Oracle 11g JDBC-drivrutiner använder detta API för att generera slumptal under inloggning. Användare som använder Linux har stött på SQLException("Io exception: Connection reset")
.
Problemet är tvåfaldigt:
-
JVM försöker lista alla filerna i /tmp (eller alternativa tmp-katalogen inställd av -Djava.io.tmpdir) när
SecureRandom.nextBytes(byte[])
åberopas. Om antalet filer är stort tar metoden lång tid att svara och får därför servern att ta en timeout -
Metoden
void nextBytes(byte[])
använder /dev/random på Linux och på vissa maskiner som saknar den slumptalsgenererande hårdvaran saktar operationen ner till den grad att hela inloggningsprocessen stoppas. I slutändan stöter användaren på SQLException("Io exception:Connection reset")
Användare som uppgraderar till 11g kan stöta på detta problem om det underliggande operativsystemet är Linux som körs på en felaktig hårdvara.
Orsaken till detta har ännu inte fastställts exakt. Det kan antingen vara ett problem i hårdvaran eller det faktum att programvaran av någon anledning inte kan läsa från dev/random
en lösning verkar lägga till den här inställningen till jvm
-Djava.security.egd=file:/dev/./urandom