C# HTTP 503对BeginGetResponse()的响应会造成大量CPU使用

C# HTTP 503对BeginGetResponse()的响应会造成大量CPU使用,c#,.net,vb.net,http,C#,.net,Vb.net,Http,我每秒向一些HTTP服务器发送约3K HTTP请求,以使用我的服务所依赖的API 通过调用BeginGetResponse()异步发出请求 99%的响应是404,这是预期的,我的代码处理这些响应时没有问题。我的CPU使用率一直很低(~5-10%) 然而,有时API端的服务器开始遇到问题,我发出的每个请求都返回503错误。它们的处理方式与404完全相同,它们被忽略 然而,随着503的CPU使用量是巨大的,它停留在约60%的整个时间,503的进来。结果是,当与我交谈的API服务器出现问题时,我的整个

我每秒向一些HTTP服务器发送约3K HTTP请求,以使用我的服务所依赖的API

通过调用BeginGetResponse()异步发出请求

99%的响应是404,这是预期的,我的代码处理这些响应时没有问题。我的CPU使用率一直很低(~5-10%)

然而,有时API端的服务器开始遇到问题,我发出的每个请求都返回503错误。它们的处理方式与404完全相同,它们被忽略

然而,随着503的CPU使用量是巨大的,它停留在约60%的整个时间,503的进来。结果是,当与我交谈的API服务器出现问题时,我的整个服务器也会停机


为什么来自HTTP服务器的503响应与404相比会导致如此高的CPU使用率?503是否重置连接池中的TCP连接

由于异步运行请求,可能会使服务器缺少可用的工作线程,CPU使用率是正在处理的请求的直接结果。当您开始获得503响应时,服务器上正在执行多少请求?在您开始获得503响应的同时,您是否还收到了其他响应?请求与响应无关。无论收到何种响应,请求都以恒定速率发送。对于我发送的每个请求,我都会得到404(99%)、200(1%)或503。处理响应的回调处理404和503的方式完全相同,使用相同的if语句。如果response=“503”或response=“404”,则返回。那么您是说503响应发生在第一批3k请求中?还是要等几秒钟他们才会出现?HTTPError日志中是否有条目?通常来自IIS的503将显示在那里,并带有输入的原因。我没有任何HTTP错误日志,因为我没有运行API服务器。为什么503发生在HTTP服务器端不在我的控制之下,或者说我真的很感兴趣。我的服务器处理这些请求,可以连续几个小时不出问题,发送数百万个请求。然后,当503开始恢复,而不是正常的404,我的服务器的CPU爆炸。我让任务管理器一直处于打开状态,命令行显示503个响应流的那一刻,CPU使用率就会出现峰值。我不知道请求和503响应之间的时间差。我的建议是编写一个模拟web服务器,该服务器将提供相同的API,但始终返回503。在另一台计算机上运行此web服务器,并在连接到此服务器时在客户端上运行性能分析工具。