Hibernate导致太多time_wait连接

时间:2009-11-13 11:53:47

标签: connection pooling time-wait

我正在使用Hibernate 3,我面临与连接关闭相关的问题。

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

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

这一直在继续,数以百计;用于TIME_WAIT条件下的连接。

我不确定发生了什么以及为什么端口从Established切换到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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

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

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