Lentidão ao criar conexões com BD Oracle [resolvido]

Este eu tenho o dever de compartilhar.

Recentemente migramos de datacenter e observamos um tempo absurdamente alto na criação de conexões com o banco de dados Oracle via JDBC, num simples teste que fizemos.

Nosso ambiente:

Red Hat Linux 6.3 64 bits
Java JDK 1.7
Driver JDBC Oracle: ojdbc6.jar
BD Oracle 11g R2

Para abrir uma conexão nova, às vezes era muito rápido e às vezes demorava mais de 20 segundos.

Refiz os testes com um computador Windows e o problema nunca ocorreu. Fizemos até um teste de colocar o Windows dentro da mesma rede dos servidores Linux, para eliminar a suspeita de problemas com DNS, Firewall, Switch etc. O Windows ainda assim funcionou bem.

Pesquisando, descobrimos a causa do problema, conforme relatado aqui: http://appsintheopen.com/posts/15-oracle-jdbc-connections-slow-to-connect-dev-urandom

Isso se deve a um problema com a geração de número aleatórios no Linux. Aparentemente /dev/random é lerdo para gerar estes números aleatórios, então a solução é usar /dev/urandom.

Entretanto, existe um grande bug no Java 5 (e superior). Se a configuração aponta para /dev/urandom, ela é ignorada e /dev/random é usada em seu lugar.

A solução é corrigir esta configuração no “java.security” no seu JAVA_HOME (diretório do Java), na linha que começa por “securerandom.source” e alterá-la para:

securerandom.source=file:/dev/./urandom

Isto, basicamente, resolve o problema.

Caramba, acho que esse é o tipo de problema que alguém poderia perder muito tempo até testar todo o óbvio e chegar até a verdadeira raiz do problema. É como se alguém estivesse com uma dor na orelha por pisar errado. O tipo de conhecimento que só a experiencia nos traz. Obrigado por compartilhar a solução.

Preciso anotar isso no meu caderninho :smiley:

Valeu pela dica!