首页 > 解决方案 > 服务器端的 WCF 连接重置(为 SYN 立即发送 RST,连接被拒绝)

问题描述

谁能澄清一下服务器端的功能MaxPendingAccepts和功能是什么?MaxPendingConnections我已经阅读了文档,我认为这可能与我们遇到的问题有关。

我认为MaxPendingAccepts文档可能有问题?

“此属性限制了服务器可以等待侦听器的通道数。当MaxPendingAccepts太低时,将有一小段时间所有等待的通道都开始服务连接,但没有新的通道开始监听。连接可以在此时间间隔内到达并且会失败,因为服务器上没有任何东西在等待它。可以通过将MaxPendingConnections属性设置为更大的数字来配置此属性。”</p>

这真的意味着通过改变MaxPendingAccepts来改变MaxPendingConnections吗?我不清楚这两个属性之间的区别。我们目前没有设置默认为 12 * 核心(在我们的例子中是 8 个)MaxPendingConnections

我们在大容量服务上使用 net.tcp 绑定。我们的用户在过去几年中急剧增加,它是一个由 4 台服务器组成的 NLB 集群,但有时我们会遇到突发流量,其中(根据 perfmon)每秒调用数高达 200 多个。

在此期间,我们遇到了问题,网络流量监控显示我们收到一个 SYN,然后在 0.2 毫秒内我们发回一个 ACK​​,RST 关闭连接。

WCF 跟踪在此期间没有显示任何错误,所以我认为它没有受到限制。我已经形成了一个假设,它是SynAttackProtect,但到目前为止,我在 netsh 跟踪 + 网络监视器中找不到任何积极或消极的证据。

Perfmon 向我们展示了我们的最大实例、调用和会话数。

现在,我们的服务器配置是这样的:

MaxConcurrentSessions = 1500;
MaxConcurrentInstances = 1500;
MaxConnections = 1600;
ListenBacklog = 800;
MaxPendingSessions = 300;
MaxPendingAccepts = 20;

// MaxPendingConnections = not set, as mentioned above,
// and docs seem to indicate this is 12 * cores (8).

我的新假设是我们可以发送 RST 响应 SYN 的原因是因为可能没有实际的 TCP 侦听器?MaxPendingAccepts 小于并发调用会导致这种行为吗?

MaxPendingAccepts 是否应该像挂起的会话一样增加到 300?是否应该设置 MaxPendingConnections?为什么文档说设置 MaxPendingConnections 以影响 MaxPendingAccepts?

我正在尝试验证拒绝连接是否可能是由 MaxPendingAccepts 为 20 引起的。

标签: wcftcpnettcpbinding

解决方案


推荐阅读