连接池打开更多连接,然后打开最大池大小

时间:2013-08-06 10:11:31

标签: oracle glassfish database-connection connection-pooling

嘿我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。

我在管理控制台中为Oracle 11g定义了一个JDBC连接池,并设置了:

Pool Settings

初始和最小池大小:500

最大泳池尺寸: 1000

池调整大小数量::750

我已为此连接池创建了特定用户。然而,有时当我检查数据库中打开的连接时,我发现有超过1000个(最多我看到的是1440)

当发生这种情况时,任何查询尝试都会失败,有时会出现OutOfMemory异常,有些显示http线程中断,有些则根本不显示任何日志,只需要很长时间。

我想知道的是,Glassfish如何开启更多连接然后我将其定义为?

1 个答案:

答案 0 :(得分:0)

尝试比较appl上netstat的输出。服务器和数据库服务器端。你可能有一些“悬空”的联系。还尝试在Oracle中找到有关DCD(死连接检测)的一些文档。

几年前,我看到Java应用服务器认为连接已经死亡的情况,因为它几分钟没有响应。所以这个连接放在一些死连接列表上,并创建了一个新连接。

也可能存在一些网络问题 - 例如appl和db server之间存在FW。 当TCP连接在一小时内没有激活时,它会在一侧切换,但是DB服务器不知道这一点。

如何调查的常用方法是

  • 比较两个netstat(appl./db)的输出
  • 识别悬空的TCP连接
  • 将TCP连接转换为Oracle会话进程的Unix进程ID(PID)
  • 将PID转换为Oracle会话(SID和SERIAL#)
  • 在Oracle级别上删除会话(alter system kill session ...)