2

我们的一个客户使用 Netscaler 作为 Fuse 服务器和我们的 Tomcat 托管软件之间的平衡器中间件。目前,我们的软件和 netscaler 之间遇到了奇怪的通信行为(我们正在使用 Spring-WS 发出 SOAP 请求):一段时间后,由于正在向 netscaler 发出请求并且正在等待响应,因此 netscaler 发送 ACK、RST 数据包到我们的服务器,因此,Java 抛出“连接重置”IOException。tcp转储如下: 火鲨截图

根据 netscaler 文档,Win重置数据包的字段包含9300在这种情况下的错误代码,表示“清理空闲连接”,这又意味着 netscaler 运行“僵尸”进程,清理空闲连接并且该进程已识别我们的连接处于空闲状态。

在这种情况下,为什么连接会被idlenetscaler 处理?

更新 这里是更完整的通信日志: 在此处输入图像描述

4

2 回答 2

0

好的,这就是我读过和说过的:

  1. 在 TCP 层面,挂起连接的协议没有问题(即长时间没有发送任何内容,也没有连接终止序列);
  2. 然而,问题出现在更高的级别(为每个连接分配系统资源),为了解决这个问题,有一个非官方的(因为它容易出错)挂起连接的解决方法:为了优雅地终止连接,连接的任一端可能会发送keepalive数据包(探测)并在发送了几个数据包并且没有收到另一端的响应后采取行动。
  3. Netscaler 以两种方式响应挂起连接的问题:它要么在一定(可配置的)时间后关闭挂起的连接,要么它可以使用 keepalive-probe 方法(并且在该方法上也有可配置的参数)

尽管我们的客户确实发现了隐藏在服务实现中的更深层次的问题(长请求处理),但我们也可以应用 keepalive-probes 方法来停止连接重置。

链接:

http://www.tcpipguide.com/free/t_TCPConnectionManagementandProblemHandlingtheConnec-3.htm

https://www.citrix.com/blogs/2012/07/26/netscaler-10-keep-alive-value-add-to-the-tcp-stack-with-profiles/

于 2015-12-03T06:12:48.847 回答
0

服务器和重置数据包之间的时间差是多少?您可以在 netscaler 虚拟服务器上为空闲的客户端调整空​​闲超时值,在服务上为需要很长时间才能响应的服务器调整空闲超时值。

于 2015-12-01T11:23:53.437 回答