Oracle
 sql >> Database >  >> RDS >> Oracle

java.sql.SQLException:errore I/O:connessione ripristinata nel server Linux

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:

  1. La JVM tenta di elencare tutti i file nella /tmp (o nella directory tmp alternativa impostata da -Djava.io.tmpdir) quandoSecureRandom.nextBytes(byte[]) viene invocato. Se il numero di file è grande, il metodo richiede molto tempo per rispondere e quindi causa il timeout del server

  2. 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