我们有一个 32 位传统多线程 C++ Windows 服务,它使用 Msxml2.ServerXMLHTTP.3.0 实例向一个或多个远程计算机/主机/端点发送消息。
我们最近将此服务从 Windows 2008 标准(32 位)操作系统迁移到了 Windows 2012 R2 64 位操作系统。该服务仍以 32 位模式运行。
已经注意到的是,如果远程主机在线,则一切正常。但是,如果远程主机脱机,那么内存和句柄计数将无法控制地增长,直到服务最终崩溃。如果远程主机联机或与任何其他主机交换消息,则句柄计数和内存开始减少恢复正常,并在任何单个主机/端点(远程计算机)脱机时开始恢复。
还注意到的是,与 Windows 2008(小于 200 毫秒)相比,Windows 2012 上的 IServerXMLHTTPRequest::Send() 方法超时需要更长的时间(3-4 秒)。相同的服务在 Windows 2008 64 位上运行良好,但在 Windows 2012 R2 上存在问题。
查看 netstat,我们看到对离线端点的 2 个 SYN_SENT 请求,第一个 SYN_SENT 状态大约需要 3-4 秒才能超时。在 2008 年,同样的速度要快得多。
任何指针将不胜感激。
谢谢!!