Odpověď převzata z fóra Oracle zde :
java.security.SecureRandom
je standardní API poskytované společností sun. Mezi různými metodami nabízenými touto třídou void nextBytes(byte[])
.
Tato metoda se používá pro generování náhodných bajtů. Ovladače Oracle 11g JDBC používají toto API ke generování náhodných čísel během přihlašování. Uživatelé používající Linux se setkávají s SQLException("Io exception: Connection reset")
.
Problém je dvojí:
-
JVM se pokusí vypsat všechny soubory v /tmp (nebo alternativním adresáři tmp nastaveném parametrem -Djava.io.tmpdir), když
SecureRandom.nextBytes(byte[])
je vyvoláno. Pokud je počet souborů velký, metoda trvá dlouho, než odpovídá, a proto způsobí časový limit serveru -
Metoda
void nextBytes(byte[])
používá /dev/random na Linuxu a na některých počítačích, které nemají hardware generující náhodná čísla, operace se zpomalí do té míry, že se zastaví celý proces přihlašování. Nakonec uživatel narazí na SQLException("Io výjimka:Reset připojení")
Uživatelé upgradující na 11g mohou narazit na tento problém, pokud je základním OS Linux, který běží na vadném hardwaru.
Příčina toho nebyla dosud přesně stanovena. Může to být buď problém v hardwaru, nebo skutečnost, že software z nějakého důvodu nemůže číst z dev/random
řešení Zdá se, že toto nastavení přidává do jvm
-Djava.security.egd=file:/dev/./urandom