【发布时间】:2019-08-06 07:14:51
【问题描述】:
我们有一个应用程序使用简单的 JDBC 连接到数据库。现在一些 使用 SQL Server 的客户抱怨应用程序时常崩溃。检查日志文件显示错误
com.microsoft.sqlserver.jdbc.SQLServerException:软件导致连接中止:recv 失败
在试图找出这个错误的原因时,我发现了一些我觉得很奇怪的事实:
该软件可能运行数小时甚至数天而不会出现任何问题。然后,突然,错误发生了,而在做之前已经做过一千次的事情。 (例如:有一个后台进程,即定期轮询数据库,假设每 20 秒一次,如果有事可做。在没有人使用系统的半夜,通常情况并非如此,所以夜间正常的后台操作只是这个轮询。但是,尽管如此,它可能会发生在几个小时内什么都不做时,它会因为这个错误而崩溃。)
使用 oracle 数据库的系统不会出现此问题。软件是一样的,但是没有报错。
没有明显的数据库维护等等。数据库管理员方面没有任何可能与该问题相关的信息。
我在事件日志中没有找到任何可能与问题相关的提示。
为了找出短网络问题是否可能是我运行 ping 实用程序(hrping,它还允许写入时间戳)的原因。但是:只要 ping 正常运行,问题就会消失。如果我停止 ping,那么我会恢复崩溃。
似乎与远程或非远程数据库无关。在一个受影响的系统上,数据库位于另一台服务器上,而在另一个受影响的系统上,它甚至位于同一台服务器上。
崩溃非常不规律。如果它们经常发生,那么它们一天会发生几次。但它也可以运行一个月而没有问题。为了让您了解时间模式,我在这里列出了每天的崩溃次数:
Date Crash count
------------------------------ -----------
2019-08-06 1
2019-08-05 5
2019-08-03 1
2019-07-31 1
2019-07-27 5
2019-07-26 1
2019-07-24 1
2019-07-20 3
2019-07-19 2
2019-07-18 2
2019-07-16 1
2019-07-15 2
2019-07-14 1
2019-07-12 1
2019-07-11 1
2019-07-10 1
2019-07-09 2
2019-07-05 1
2019-07-01 1
2019-06-27 1
2019-06-25 1
2019-06-24 1
2019-06-20 1
2019-06-18 1
2019-06-17 5
2019-06-16 1
2019-06-11 1
2019-06-10 1
2019-06-07 1
2019-06-04 1
2019-06-03 2
2019-06-02 2
我们只在极少数系统上遇到这种情况。其他客户将 SQL Server 数据库与相同的应用程序一起使用,并且运行它没有任何问题。
我将 JDBC 驱动程序更新到兼容的最新版本 (6.4.0),但这并没有解决问题。
关于软件的一些背景信息:
我们使用的是 Java 7 (1.7.0_80 b15),SQL server 版本分别是 2012 (v11.0.5058.0) 或 2014 (v12.0.2000.8)。
为了找到解决方案,我进行了很多谷歌搜索,但这些错误大多与连接上的连接问题有关——在工作过程中不是间歇性的。
到现在为止,我真的没有什么想法了......也许你有一些建议我可以检查一下?
【问题讨论】:
标签: sql-server connection