我有一个曾经工作过的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代码却说了别的。
有人有任何想法吗?
此致 让
答案 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
症状和变化 - 更多行 - 介绍匹配完美。但是,虽然建议的“建议”可以解决问题,但我的建议是使用连接池(使用独立的连接池,如c3p0或DBCP)。这将是IMO解决问题和提高性能。