(JPA/Toplink)网络错误IOException:地址已在使用中:连接

5

我有一个之前运行正常的JPA项目。这个月,我往数据库里添加了一些数据。当我运行通常的作业(之前几个月都是这么做)时,出现了以下错误:

异常[TOPLINK-4002](Oracle TopLink Essentials - 2.0.1(构建b09d-fcs(12/06/2007))):oracle.toplink.essentials.exceptions.DatabaseException 内部异常:java.sql.SQLException:网络错误IOException:Address already in use: connect 错误代码:0

我检查了我的LocalPersistenceFacade,这里包含我调用的大多数方法,通过打印计数器来查看,我得到了关闭和打开连接的确切数量:457. 然后我的作业就崩溃了。通常情况下,它应该达到601而不是457。

在数据库方面,没有任何与可能崩溃相关的信息。所有东西都看起来正确,但我的Java代码说了另外的事情。

请问有人有什么想法吗?

谢谢, Jean

1个回答

6
我的理解是,您正在为每一行打开/关闭连接,您面临的问题看起来像此页面所描述的问题:
可能原因: 在运行大量数据时,通过具有多个功能的映射。Windows无法快速关闭连接,这会导致网络I/O异常。
建议: 修改Windows注册表中以下两个值:
这个值修改Windows用于打开连接的端口范围。默认情况下,它只允许到端口5000。通过修改这个值,Windows将能够在必须重新开始之前打开更多的端口。每个连接都使用一个端口,因此它从1025开始,并上升到该值。当它达到最大值时,它回到1025并尝试再次打开该端口。
系统键: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 名称:MaxUserPort 类型:REG_DWORD 值:5000-65534
这将更快地“释放”已关闭的端口。默认情况下,Windows将端口保留在TIME_WAIT状态下240秒。如果MaxPort值设置为新连接将使用尚未从TIME_WAIT状态中删除的“旧”端口,则可能会出现问题。通过降低这个值,您可以更快地释放连接。
系统键: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 值名称:TcpTimedWaitDelay 数据 类型:REG_DWORD 值数据:30-300
症状和更改 - 更多行 - 完全匹配。然而,虽然建议的“建议”可能解决问题,但我的建议是使用连接池(使用独立的连接池,如c3p0DBCP)。这将在我看来解决问题并提高性能。

它通过增加最大用户端口数量来实现。我想我会按照你的建议设置一个连接池。谢谢你帮我解决这个问题。 - Jean N.T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接