wcf - 服务器端的 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 引起的。
解决方案
推荐阅读
- javascript - 从脚本创建一个数组,然后提醒内容
- regex - Regular expression for phone number: starts from + and all zeros not allowed
- sql - 如何使用 date_part 选项在 postgres 中获取不同的日期
- mysql - MySQl 查询中的基本布尔逻辑
- python - python class attribute reference side effect?
- reactjs - 如何给机器人动态请求?
- c++ - 将库链接到仅标题的库
- python - 为什么 jupyter-notebook (Anaconda) 不运行带有任何选项的脚本?
- google-cloud-platform - 将 DialogFlow 连接到 Compute Engine 实例
- javascript - HTML 在函数执行前显示空的 DIV 元素