0

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

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

Pool Settings

初始和最小池大小:500

最大池大小: 1000

池调整数量::750

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

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

我想知道的是 Glassfish 怎么可能打开更多的连接然后我定义它?

4

1 回答 1

0

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

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

也可能存在一些网络问题 - 例如,appl 和 db 服务器之间存在 FW。当 TCP 连接一小时未处于活动状态时,它会在一侧被切断,但数据库服务器不知道这一点。

通常的调查方法是

  • 比较两个 netstat(s) 的输出 (appl./db)
  • 识别悬空的 TCP 连接
  • 将 TCP 连接转换为 Oracle 会话进程的 Unix 进程 ID(PID)
  • 将 PID 转换为 Oracle 会话(SID 和 SERIAL#)
  • 在 Oracle 级别上终止会话(alter system kill session ...)
于 2013-08-06T11:16:26.423 回答