【问题标题】:Hibernate causing too many time_wait connections休眠导致太多 time_wait 连接
【发布时间】:2010-12-16 06:32:10
【问题描述】:

我正在使用 Hibernate 3,但我遇到了与关闭连接相关的问题。

我正在使用 c3p0-0.9.1.2.jar 并检查了 Hibernate 打开的与数据库服务器的连接,我发现已经建立了 5 个连接;在服务器的一些 TCP 端口(见下面的日志)。

但是这些已建立的连接会不断更改它们建立的 TCP 端口,从而释放它们使用的较早端口,使这些端口处于 TIME_WAIT 状态(而不是关闭它们)。

这继续进行,数以百计;对于 TIME_WAIT 条件下的连接。

我不确定发生了什么以及为什么端口从已建立切换到 TIME_WAIT 并且之前的端口都没有关闭。

以下是通过运行 NETSTAT -ano|find "x.9" 获取的示例,其中 x.9 是数据库服务器 IP。

TCP     x.124.x.66:4379     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4381     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4382     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4383     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4384     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4385     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4386     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4387     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4388     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4389     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4390     x.124.x.9:1433      ESTABLISHED     5916

我使用的 Hibernate.properties 文件。

hibernate.c3p0.min_size=5
hibernate.c3p0.timeout=2
hibernate.c3p0.max_size=50
hibernate.c3p0.idle_test_period=10000
hibernate.connection.release_mode=auto

感谢您的帮助。

【问题讨论】:

    标签: connection pooling time-wait


    【解决方案1】:

    TIME_WAIT只是一方或双方已经终止连接,但尚未关闭的状态。根据您的操作系统,您可以微调 TIME_WAIT 中的连接时间。所以这并不意味着什么不好,只要没有太多阻碍创建新连接的情况,它对性能没有影响。

    在问题的另一部分,当客户端连接到由主机名和目标端口指定的服务器时,客户端的连接将分配给一个端口。这样做的原因是连接由四个事物标识:目标主机、目标端口、源主机、源端口

    这正是您在 netstat 输出中看到的情况:池创建了 5 个已建立的连接,还有一些即将关闭的连接处于 TIME_WAIT 状态。每个都有自己的源端口,从一个范围动态分配。这是完全正常的。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多