Risposta presa dal forum Oracle, qui :
java.security.SecureRandom
è un'API standard fornita da sun. Tra i vari metodi offerti da questa classe void nextBytes(byte[])
.
Questo metodo viene utilizzato per generare byte casuali. I driver Oracle 11g JDBC utilizzano questa API per generare un numero casuale durante l'accesso. Gli utenti che utilizzano Linux hanno riscontrato SQLException("Io exception: Connection reset")
.
Il problema è duplice:
-
La JVM tenta di elencare tutti i file nella /tmp (o nella directory tmp alternativa impostata da -Djava.io.tmpdir) quando
SecureRandom.nextBytes(byte[])
viene invocato. Se il numero di file è grande, il metodo richiede molto tempo per rispondere e quindi causa il timeout del server -
Il metodo
void nextBytes(byte[])
usa /dev/random su Linux e su alcune macchine prive dell'hardware che genera numeri casuali, l'operazione rallenta al punto da fermare l'intero processo di accesso. Alla fine l'utente incontra SQLException("Io eccezione:Reimpostazione connessione")
Gli utenti che eseguono l'aggiornamento a 11g possono riscontrare questo problema se il sistema operativo sottostante è Linux che è in esecuzione su un hardware difettoso.
La causa di ciò non è stata ancora determinata esattamente. Potrebbe essere un problema nell'hardware o il fatto che per qualche motivo il software non può leggere da dev/random
una soluzione sembra aggiungere questa impostazione a jvm
-Djava.security.egd=file:/dev/./urandom