Oracle getConnection运行缓慢

在Java项目中,我使用的是ojdbc6 jar

 com.oracle ojdbc6 11.2.0.1.0 compile  

我运行一天的第一次,dataSource.getConnection()很快。 第二次通常没关系。 接下来的几次大约需要45秒。 之后,需要几分钟。 一旦我有一个给定应用程序运行的FIRST连接,我得到的任何新连接都非常快。 此延迟仅为给定运行获取FIRST连接。

是什么让我的第一次连接变得如此缓慢?

我正在观看netstat并且在成功运行后看不到任何连接。 尝试了几个不同的连接池( DBCP,C3PO )没有运气。 通过源代码进行调试, org.springframework.jdbc.datasource.DataSourceUtils的延迟是100%:

 Connection con = dataSource.getConnection(); 

有任何想法吗?

编辑了更多细节

1)我正在使用连接池(DBCP或C3PO),它可以保存连接以备将来使用。 当我谈到获得新连接时,我的意思是在第一个连接正在使用时……我需要转到数据库并获得新连接。 当然,我可以一遍又一遍地从连接池返回并获得相同的连接。 但同时获得第二个也很快。

2)我不知道我的DB允许我登录多少个连接。 知道这个属性在oracle中的位置吗?

是由于java使用/ dev / random而不是/ dev / urandom来与数据库建立ssh连接….切换到/ dev / urandom修复此问题

2个问题。

首先,在你获得第一个连接后,你在做什么呢? 您是否正确关闭它(包括您使用它打开的所有资源,如Statement和ResultSet)?

其次,您的数据库允许您使用多少个连接来获取您登录的凭据?

我提出这些问题的原因是时间延迟可能是数据库在您之后清理所需的时间(因为您可能没有正确完成)并释放连接以提供给您。 在强行释放资源之前,大部分可能只是超时。

您是否超过了连接池中的最大活动连接数并且必须等待程序释放旧连接?