我制作了一个简单的应用程序,它创建了一个 libcurl 对象并开始发送 http 消息。我将它们指向我本地网络上运行 netcat 作为服务器的另一个框。我在我的 Windows 机器上启动了其中的 200 个。netcat 服务器响应了许多请求,尽管有很多请求正在进行,以至于由于超时而错过了大多数请求。
您可以在这里找到完整的源代码,实际代码在这里。如果您在那里闲逛,您可以看到我如何构建和运行测试应用程序。
在几分钟内,系统将变得无响应。我被迫按下电源按钮才能再次访问。它不响应 telnet、远程调试、RDP,但它会响应 ping。它不会创建故障转储。
这里真正的问题是我不明白如何在它发生时抓住它,所以我不知道如何调试它。我希望有人知道诊断此问题的正确方法。
我可以通过实现一些 QoS 类型的行为来避免这种情况。除非我可以测量实际锁定系统的原因,否则恐怕我只会掩盖这个问题。
如果您使用 /BELOWNORMAL 启动进程,它的重现速度似乎要快得多。
在安全模式下,我无法在同一台机器上重现它。我无法在我的 Mac 上重现它。我已经禁用了 AV/防火墙,没有区别。我检查了我的驱动程序,它似乎是最新的。我已经在具有不同硬件配置的多台机器上实现了它。
我已经监控了我知道要检查的所有指标,cpu、ram、NPP、端口、句柄、线程,似乎没有什么令人担忧的。我已经启动了 600 个,差别不大,所以我认为我没有达到一些硬资源限制。
我询问了 libcurl 邮件列表,他们声称 libcurl 不应该能够做到这一点,尽管他们对问题所在没有任何意见。