(JPA / Toplink)网络错误IOException:已在使用的地址:connect

时间:2010-04-12 14:42:00

标签: exception jpa networking toplink-essentials java-5

我有一个曾经工作过的JPA项目。这个月,我在我的数据库中添加了一些数据。当我运行通常的工作(我曾经在前几个月运行)时,我收到此错误:

异常[TOPLINK-4002](Oracle TopLink Essentials - 2.0.1(Build b09d-fcs(12/06/2007))):oracle.toplink.essentials.exceptions.DatabaseException 内部异常:java.sql.SQLException:网络错误IOException:已在使用的地址:connect 错误代码:0

我检查了我的LocalPersistenceFacade,其中包含我正在调用的大多数方法,通过打印计数器,我得到了关闭和打开的连接的确切数量:457。然后我的工作崩溃了。通常,它应该到601而不是457。

在数据库方面,没有与可能的崩溃相关的信息。一切似乎都是正确的,但我的java代码却说了别的。

有人有任何想法吗?

此致 让

1 个答案:

答案 0 :(得分:5)

我的理解是你打开/关闭每一行的连接,你面临的问题看起来像this page中描述的那个:

  

可能原因

     

运行大量数据时   通过具有多个的地图   功能。 Windows无法关闭   连接速度足够快导致   网络I / O异常。

     

推荐

     

修改以下两个值   Windows注册表:

     

这个修改了端口范围   Windows用于打开连接。   默认情况下,它只允许最多   端口5000.通过修改此值,   Windows将能够打开更多   在重新回收之前的端口   一开始。每个连接使用一个   端口,所以从1025开始上升   达到这个价值。当它达到最大值时   价值回到1025并尝试   再次打开那个港口。

     

系统密钥:
  HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ TCPIP \参数
  名称:MaxUserPort类型:REG_DWORD
  价值:5000-65534

     

这将“释放”关闭的端口   快点。默认情况下,Windows会离开   处于TIME_WAIT状态的端口为240   秒。如果这可能会导致问题   MaxPort值设置为a   新连接将使用“旧”   尚未删除的端口   TIME_WAIT状态呢。减少   这个值,你允许连接   被更快地释放。

     

系统密钥:
  HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ TCPIP \参数
  值名称:TcpTimedWaitDelay数据
  键入:REG_DWORD值数据:30-300

症状和变化 - 更多行 - 介绍匹配完美。但是,虽然建议的“建议”可以解决问题,但我的建议是使用连接池(使用独立的连接池,如c3p0DBCP)。这将是IMO解决问题提高性能。