Resposta retirada do fórum oracle, aqui :
java.security.SecureRandom
é uma API padrão fornecida pela sun. Entre vários métodos oferecidos por esta classe void nextBytes(byte[])
. Este método é usado para gerar bytes aleatórios. Os drivers JDBC do Oracle 11g usam essa API para gerar números aleatórios durante o login. Usuários que usam Linux estão encontrando
SQLException("Io exception: Connection reset")
. O problema é duplo:
-
A JVM tenta listar todos os arquivos no /tmp (ou diretório tmp alternativo definido por -Djava.io.tmpdir) quandoSecureRandom.nextBytes(byte[])
é invocado. Se o número de arquivos for grande, o método demora muito para responder e, portanto, faz com que o servidor atinja o tempo limite
-
O métodovoid nextBytes(byte[])
usa /dev/random no Linux e em algumas máquinas que não possuem o hardware gerador de números aleatórios, a operação diminui a ponto de interromper todo o processo de login. Por fim, o usuário encontra SQLException("Io exception:Connection reset")
Os usuários que atualizam para 11g podem encontrar esse problema se o sistema operacional subjacente for o Linux que está sendo executado em um hardware defeituoso.
A causa disso ainda não foi determinada exatamente. Pode ser um problema no hardware ou o fato de que, por algum motivo, o software não pode ler
dev/random
uma solução parece adicionar essa configuração ao jvm
-Djava.security.egd=file:/dev/./urandom