gpt4 book ai didi

sql-server - SYN 收到 RST,ACK 非常频繁

转载 作者:太空狗 更新时间:2023-10-29 12:36:39 27 4
gpt4 key购买 nike

您好套接字编程专家,

我正在 Linux 上为在 Windows 上运行的 SQL Server 2005/2008 编写代理服务器。该代理是使用 bsd 套接字和 C 语言编写的,它工作正常,但存在如下所述的问题。

当我使用数据库客户端(用 JAVA 编写,并在 Linux 机器上运行)直接向数据库服务器发送查询(并发数为 100 或更多)时,没有经历连接重置。但是通过我的代理,我遇到了很多连接重置。

深入挖掘后,我了解到从“DB client”到“Proxy”的连接总是成功的但是当“代理”尝试连接到数据库服务器时,由于 SYN 数据包收到 RST、ACK,连接失败。

那是为了提供一些背景知识。问题是 :为什么有时SYN会收到RST,ACK?

DB client(linux) to Server(windows)  ----> Works fine
DB client(linux) to Proxy(Linux) to Server(windows) -----> problematic

我知道这可能发生在“连接被拒绝”的情况下,但这绝对不是那种情况。 SYN 泛洪可能是另一种情况,但这并不能解释直接向服务器发送信号时的良好行为。

我怀疑可能需要一些套接字选项设置,客户端在连接之前需要设置,而我的代理不需要。请说明一下。非常感谢任何帮助(链接或指针)。

附加信息:

写了一个并发连接的C客户端,它以并发为参数。以下是我的观察: -> 在 5000 及以上并发时,一些连接失败并显示“连接被拒绝”。 -> 低于 2000,它工作正常。

但即使在并发100或更多时也观察到实际问题。注意:问题是时间相关的,有时它根本不会出现,有时它非常频繁,数据库客户端(直接到服务器)在任何时候都可以正常工作。

最佳答案

SQL Server 需要 worker threads接受传入连接。如果您的服务器缺少工作人员(可以通过 sys.dm_os_tasks 中处于 PENDING 状态的大量条目轻松诊断),则尝试打开新连接将失败。因此,我怀疑发生的情况很可能是您正在向服务器推送它可以处理的更多工作负载。您需要优化工作负载或获得更强大的服务器。

像Java客户端这样的客户端可以有效利用connection pooling而且,即使在高负载下,也不需要打开新连接,因此您不会看到这个问题,相反您只会看到请求完成的延迟。

关于sql-server - SYN 收到 RST,ACK 非常频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9849359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com