sql-server – Sql Server JDBC连接重置错误:仅限于Amazon EC2
背景:云
我们有一个基于java的Web应用程序,我们通常在我们自己的服务器上托管.最近我们使用Amazon Web Services(AWS EC2)云来托管一个实例. 这个“云设置”与我们典型的“现场”设置相匹配:应用服务器的一个服务器,数据库服务器的另一个服务器. (几个应用服务器指向同一个数据库服务器) 问题 以下是日志的几个错误摘录 堆栈跟踪示例1: at com.participate.pe.genericdisplay.client.taglib.GenDisplayViewTag.doStartTag(GenDisplayViewTag.java:77) ... 75 more Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170) at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:304) at com.microsoft.sqlserver.jdbc.SQLServerConnection.getMetaData(SQLServerConnection.java:1734) at org.jboss.resource.adapter.jdbc.WrappedConnection.getMetaData(WrappedConnection.java:354) 堆栈跟踪示例2 at java.lang.Thread.run(Thread.java:619) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1368) at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1355) at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1532) at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274) at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4437) at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4389) at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:1457) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1462) at com.microsoft.sqlserver.jdbc.SQLServerConnection.setAutoCommit(SQLServerConnection.java:1610) at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkTransaction(BaseWrapperManagedConnection.java:429) 技术环境 > Jboss 4.2.2.GA(Jboss-Web 2.0 / Tomcat 6) 一些点 >我们从来没有见过这个问题 问题 以前有人看过这个吗? **更新** 关于额外的信息:两个虚拟服务器(数据库和应用程序服务器)在不同的子网上,即两台服务器之间一跳. 在非云环境中,我们在两台服务器上都有“零跳”. 我们的托管管理员表示,我们无法控制EC2实例的子网.这让我想知道虚拟私有云是否会有所帮助. 提前致谢 将 解决方法只需谨慎使用DBCP /连接池功能来减轻问题 – 启用“testOnBorrow”和其他功能的可用性越多,引入系统延迟或其他性能变化的影响越多.我不知道DBCP是否仍然执行此操作,但几年以前,它将生成实际的测试查询来测试连接 – 完整的堆栈,数据库响应 – 而不仅仅是在网络层.来自Brian的上述链接带来了二十世纪早期关于JDBC连接管理的周边重试逻辑的可怕回忆.无论如何,真正根本原因是困难的,除了收集证据,并将“看似随机的”消除到一组具体的条件: >你可以尝试抛出一个Wireshark / PCAP跟踪,找到它发生的时间,并将结果发送给亚马逊和微软看看是否可以根本原因 我不是SQL Server专家,但研究的另一个途径可能在相关产品领域内 – 例如看看有没有人遇到与TFS / Sharepoint类似的问题(例如http://nickhoggard.wordpress.com/2009/12/07/further-experiences-with-tfs-2010-beta-2-on-amazon-ec2/) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |