Windows Server 2012 TCP端口增加,直到CPU最大化/崩溃

本文关键字:CPU 直到 最大化 崩溃 增加 2012 Server TCP Windows | 更新日期: 2023-09-27 18:05:40

我目前正在运行一个ASP。NET应用程序在我们的Windows Server 2012环境。在过去的几天里,我们的网站和服务一直出现错误和退出。

当服务开始下降后查看资源监视器时,我们可以看到CPU被锁定在100%的使用率。我们认为这可能是内存泄漏,所以我们增加了应用程序可用的内存量,并观察了内存使用情况,结果没有变化。

在使用进程监视器(ProcMon)之后,在服务崩溃的开始(我很幸运当时看到它),w3wp.exe服务受到数百个TCP发送/TCP接收请求的攻击,这些请求来自不同的端口。例如,它看起来像这样

TCP Send HOST-01234:65142 -> HOST-01234:49685
TCP Send HOST-01234:65143 -> HOST-01234:49685
TCP Send HOST-01234:65145 -> HOST-01234:49685
TCP Receive HOST-01234:65145 -> HOST-01234:49685
TCP Send HOST-01234:65146 -> HOST-01234:49685
TCP Send HOST-01234:65147 -> HOST-01234:49685
TCP Receive HOST-01234:65147 -> HOST-01234:49685
TCP Send HOST-01234:65149 -> HOST-01234:49685

一旦它开始记录几百个这样的事件,服务就会停止,我们需要手动回收应用程序池。现在我知道,这显然是我们的代码中的东西,导致问题,但我有点卡在哪里。当我们尝试创建迷你转储时,它们的帮助不大。

我想知道如果它是WebSocket代码,我们已经集成到我们的网站,它是否可能打开端口,而不是关闭它们?这可能吗?

对于这种行为还有其他可能的解释吗?

编辑30/05/2014

在使用进程资源管理器进一步挖掘并筛选了w3wp.exe的几十个线程后,我找到了问题的根源。

似乎是对另一个服务器的HTTP PUT请求导致我们的服务挂起,迫使CPU锁定在100%,直到它得到响应。我不知道为什么它会飙升到100%,但至少我现在找到了问题的根源。

Windows Server 2012 TCP端口增加,直到CPU最大化/崩溃

事实证明,我们的一个服务操作每隔几秒钟就向一台速度较慢的服务器发送一个HTTP请求。另一个服务器有时在发送另一个请求之前没有响应,这将不断累积,直到CPU达到100%的最大值并杀死我们的web服务器。

我通过实现请求超时来解决这个问题,并通过在数据库中使用布尔值来管理我们的请求发送,以确定我们是否需要发送请求,而不是每隔几秒钟不断发送请求。