当前位置: 首页 > 知识库问答 >
问题:

连接池打开的连接数超过最大池大小

满俊楠
2023-03-14

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

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

Pool Settings

初始和最小池大小:500

最大游泳池大小:1000

池大小调整数量::750

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

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

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

共有1个答案

黄景胜
2023-03-14

1t尝试比较appl上netstat的输出。服务器和db服务器端。你可能有一些“悬而未决”的联系。还可以在Oracle中查找一些有关DCD(死连接检测)的文档。

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

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

通常的调查方法是

  • 比较两个netstat(s)(appl./db)的输出
  • 识别悬空TCP连接
  • 将传输控制协议转换为Oracle会话进程的Unix进程ID(PID)
  • 将PID转换为Oracle会话(SID和SERIAL#)
  • 在Oracle级别杀死会话(更改系统杀死会话...)
 类似资料:
  • 我正在使用hikari cp和spring boot应用程序,它有超过1000个并发用户。我已经设置了最大池大小- 当我使用 它显示的最大值为300,等于池大小。它永远不会增加超过最大池。这是故意的吗?我认为池大小意味着保持连接,以便在将来需要数据库请求时可以重用连接,但在需要时可以进行更多连接。 另外,当我删除max pool配置时,我会立即得到- HikariPool-0-连接不可用,请求在3

  • 在OkHttp中,我找不到设置硬最大连接池大小的方法。从留档https://square.github.io/okhttp/3.x/okhttp/okhttp3/ConnectionPool.html很明显,您可以设置最大空闲连接,但不能设置整体最大值。这意味着在高负载下,它可以增长超过任何限制。 有没有办法最大化池?如果没有,为什么没有?

  • 问题内容: 目前,我们正在使用带有8gb RAM的4个cpu窗口框,并在同一框上安装了MySQL5.x。我们正在为应用程序使用Weblogic应用程序服务器。我们的应用程序目标是200个并发用户(显然不是同一模块/屏幕)。那么,我们应该在连接池中配置的最佳连接数是多少(最小和最大数)(我们正在使用weblogic AS的连接池机制)? 问题答案: 这个问题有一个非常简单的答案: 连接池中的连接数应

  • 问题内容: 为什么在hibernate配置文件中为连接池设置10?size = 1是内置的size。为什么需要增加大小? 问题答案: 来自Hibernate API 文档。 但是,Hibernate自己的连接池算法非常初级。它旨在帮助您入门,不适合在生产系统中使用,甚至不用于性能测试。您应该使用第三方池来获得最佳性能和稳定性。只需将hibernate.connection.pool_size属性替

  • 我目前正在使用okhttp 3.10.0,我最近才发现,为每个新请求创建一个新的客户端对每个拥有自己连接池的客户端都是有害的。 我在servlet中使用okhttp。我现在要做的就是在每个servlet中声明一个静态客户机,并在init()方法中初始化它 这里是最大空闲连接的配置,我将其设置为20,空闲超时设置为5分钟。 1)实际的池大小是多少,即池将具有的最大连接(通过代码查看,我发现它可能是I

  • 我正在尝试使用ApacheDBCP2使用连接池。 我的最大总连接是5。我关闭每一个连接后,它被使用。 但在连接池中关闭5次连接后,我仍然获得连接。 关闭5个连接后,何时ping数据库以获取连接?或者,它将从连接池本身获取数据,而不访问数据库。 下面是我的示例代码片段。请纠正我对连池的理解。