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.