gpt4 book ai didi

asp.net - 通用处理程序 (.ashx) 实现 IHttpAsyncHandler 时出现 IIS 7.0 503 错误

转载 作者:行者123 更新时间:2023-12-02 13:47:06 25 4
gpt4 key购买 nike

我在使用实现 IHttpAsyncHandler 的通用处理程序时遇到了一些性能问题。最简单的是,处理程序接收 GET 请求,并在 20 秒后将“< timeout/>”写入响应后结束响应。

当使用 10000-20000 个并发请求攻击 .ashx 时,在恰好 5000 个请求后,它会失败并显示 503 服务器不可用。当切换到同步模式并立即结束请求时,问题就消失了。

我修改了许多设置,但我唯一能实现的目标是降低发生此错误的请求阈值。

以下是我尝试过的设置的概要:

机器配置:

<configuration>
...
<system.web>
...
<processModel enable="true" requestQueueLimit="10000"/>
...

web.config:

<configuration>
...
<system.web>
...
<httpRuntime enable="true" appRequestQueueLimit="10000"/>
...

IIS 管理器 > 应用程序池 > 高级设置

Queue Length : 65535

虽然我不能确定,如果请求是同步的,这些设置似乎工作得很好,但是当异步时,在服务器开始告诉我离开之前,我似乎无法超过 5000 个请求。如果我将设置设置得较低(无法准确记住上面的设置,但我已经尝试了所有设置),那么 503 计数会相应增加,但在严重负载下我永远无法阻止它超过 5000 .

似乎有许多设置分散在无数的地方可能会影响这一点,但 5000 似乎是相当固定的。我明白了here appRequestQueueLimit 不能超过 5000,但找不到更多相关信息,怀疑这是否是错误信息。

IIS 中是否有任何类型的“洪水控制”设置可能会限制单个主机不超过 5000 个请求?如何让 IIS 处理超过 5000 个并发异步请求?

编辑2:是否有可能超出限制的任何计数器或其他指示器,我将如何进一步调查?

编辑:这是负载生成器代码:

using System;
using System.Net;
using System.Threading;

namespace HammerTime
{
class Program
{
private static int counter = 0;
static void Main(string[] args)
{
var limit = 5000;
ServicePointManager.DefaultConnectionLimit=limit;
for (int i = 0; i < limit;++i )
{
StartWebRequest(i.ToString());

}
Console.ReadLine();
}

private static void StartWebRequest(string channelId)
{
string uri = "http://spender2008/test/Test.ashx?channel="+channelId;
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri);
request.BeginGetResponse(responseHandler, request);
}

private static void responseHandler(IAsyncResult ar)
{
try
{
HttpWebRequest state = (HttpWebRequest)ar.AsyncState;
HttpWebResponse response = (HttpWebResponse)state.EndGetResponse(ar);

}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine(Interlocked.Increment(ref counter));
}

}
}
}

最佳答案

好的。已修复...非常感谢 this发布澄清一些细节的帖子。

要消除 503 错误,需要进行 3 次不同的配置更改:

机器配置:

<configuration>
...
<system.web>
...
<processModel enable="true" requestQueueLimit="100000"/>

IIS 管理器 > 应用程序池 > 高级设置

Queue Length : 65535

最后(拼图中缺失的一 block ),命令行:

appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

主帖中提到的 web.config 设置无关紧要。

10000个并发连接,没有问题。感谢您的帮助!

关于asp.net - 通用处理程序 (.ashx) 实现 IHttpAsyncHandler 时出现 IIS 7.0 503 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com