3

我有一个关键任务实时数据应用程序,它在客户端和服务器之间使用 TCP 连接。在某些情况下,连接会定期终止(SocketException)。没问题 - 只需重新连接并继续。但是,客户对这些断断续续的连接性下降并不感到兴奋。

我想知道手指在哪里。是客户端还是服务器?硬件还是软件?与以太网链接有关吗?最终结果将是向用户显示连接健康状况的指标,以便可以调查和修复不良链接。

我可以从 TcpClient、Socket 或其他任何可以告诉我连接健康状况的指标中提取任何指标吗?也许平均确认时间,重试次数等?

我特别想了解 TCP 连接 - 不仅仅是整个以太网连接(您的 LAN 连接可能很花哨,但到外部服务器可能会出现问题)。

当然,我可以 ping 远程主机,但我认为这不会真正给我我正在寻找的那种统计数据。一方面,如果服务器隐藏在 NAT 后面,我可能会 ping 路由器。

4

2 回答 2

5

首先,您应该检查您获得的 SocketExceptions 的详细信息。我不知道它们在 .Net 中包含什么,但在 Java 中,详细消息提供了有用的提示,例如“连接已被对等方关闭”或“连接重置”。

根据我的经验,套接字连接被丢弃的一个常见原因是代码中的一个错误,其中读取超时异常由与所有其他与连接相关的异常相同的 catch 子句处理,因此通常导致连接无缘无故地关闭.

在企业设置中,关闭长期 TCP 连接的典型原因是防火墙设备在没有流量的情况下关闭 TCP 连接,例如 10 分钟后,或者在连接时间达到 30 分钟后关闭连接,而不管流量如何. 一般来说,最好假设这些事情会发生,并准备好优雅地重新建立连接。

一个好的方法是查看连接关闭器中是否存在模式。例如,它们是定期关闭,还是在一段时间没有活动后关闭。您还可以运行数据包嗅探器以查看哪一方启动连接关闭或发送 RST 数据包以及原因。

于 2008-10-15T22:46:03.620 回答
1

Perfmon 是你的朋友,为所有 IP、TCP 和网络计数器运行日志。如果您可以判断连接何时终止,您可以查看图表以查看是否有任何问题 - 网络错误、无传输、无 IO 字节传输等。

还添加一些 .NET 计数器,例如 GC、内存和 CPU 使用率。

您可以做的最后一件事是增加 TCP 超时和其他设置。他们在注册表中

如果远程服务器确实有问题,您将必须监视两端,但首先要查看计数器,看看是否有任何东西跳出来。

于 2008-10-15T21:49:31.693 回答