ASP.NET HttpWebRequest 停止发送请求,CPU 使用率高

标签 asp.net httpwebrequest cpu-usage

我有一个旧的 ASP.NET 应用程序。我们将 httpWebRequest 发送到远程 REST 服务器并检索 XML,大多数时候应用程序运行良好。最近,我们每天都会遇到几次 CPU 使用率过高的问题。

在 CPU 使用率较高期间,我们监控了这些 httpWebRequest 连接(通过检查 w3wp 进程的 netstat)。一开始,连接从“ESTABLISHED”变为“CLOSE_WAIT”状态,然后这些连接超时后,这些连接就一一消失,然后就再也没有连接了。

重置 IIS 后,当 w3wp.exe 进程再次启动时,我们仍然找不到任何与 httpWebRequest 目标服务器的连接。所以CPU的使用率一直维持在较高的水平。即使经过几轮重置也无法解决问题,直到我们看到一些连接开始连接到httpWebRequest目标服务器,CPU使用率下降了。

我实际上认为这可能是我的代码没有正确处理 httpWebRequest 的问题,我在这里发布了另一个问题:How to close underlying connections after catch httpwebrequest timeout? .

正如该问题中提到的,我还发现了 System.Net.HttpWebRequest.GetResponse() 的许多超时异常。当 CPU 使用率非常高时,我们在 5 分钟内发现了 3500 个相同的异常。

什么可能导致此类问题以及可能的药物是什么?为什么应用程序不再发出请求(因为 netstat 中没有连接)?

这里是源代码以防万一:

System.Net.HttpWebResponse httpWebResponse = null;
System.IO.Stream stream  = null;
XmlTextReader xmlTextReader  = null;
try
{
    System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request);
    httpWebRequest.ReadWriteTimeout = 10000;
    httpWebRequest.Timeout = 10000;
    httpWebRequest.KeepAlive = false;
    httpWebRequest.Method = "GET";
    httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
    stream = httpWebResponse.GetResponseStream();
    xmlTextReader = new  XmlTextReader(stream);
    xmlTextReader.Read();
    xmlDocument.Load(xmlTextReader);
    //Document processing code.
    //...
}
catch
{
    //Catch blcok with error handle
}
finally
{
    if (xmlTextReader != null)
        xmlTextReader.Close();
    if (httpWebResponse != null)
        httpWebResponse.Close();
    if (stream != null)
        stream.Close();
}

最佳答案

根据您的描述,我不清楚您的高 CPU 利用率是否与您的传出 HTTP 请求有关。 CPU 利用率高可能是由于代码中的错误、CLR、IIS 中的错误或其他原因造成的。如果不知道哪个组件正在消耗 CPU,您将无法执行任何进一步操作。

如果我是您,我会首先尝试将采样分析器附加到 W3WP 进程,并查看哪个组件正在消耗 CPU。这应该会告诉您解决此问题的后续步骤。

关于ASP.NET HttpWebRequest 停止发送请求,CPU 使用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381890/

相关文章:

php - 使用 YII 框架发送 HTTP Post 请求

java - 限制 Java CPU 和内存使用

asp.net - 激活 "authorization"会导致 CSS 停止工作!怎么解决呢?

asp.net - 如何隐藏 FileUpload 控件的 "TextBox"?

asp.net - 使用 JSON.Parse 优雅降级

java.util.Timer - 如何正确使用?

Java代码速度提升

ViewState 上下文中的 ASP.NET 脏问题

c# - 如何在 c# WPF 应用程序中取消上传

c# HttpWebRequest 超时设置为零