gpt4 book ai didi

asp.net - 对 ASP.NET 并发请求进行基准测试结果不佳

转载 作者:行者123 更新时间:2023-12-03 00:20:11 26 4
gpt4 key购买 nike

我使用 jMeter 对以下代码进行了基准测试,并在本地主机上每秒收到大约 3000 个请求(故意缺少 await 来同步运行):

public async Task<HttpResponseMessage> Get()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}

问题是,当我像下面这样暂停请求一秒钟时,由于某种原因,每个 w3wp.exe 进程的吞吐量下降到每秒 10 个请求(再次故意缺少 await同步运行):

public async Task<HttpResponseMessage> Get()
{
Task.Delay(1000).Wait();
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}

即使我使用 await 也没有什么区别,每秒 10 个请求根本没有改善:

public async Task<HttpResponseMessage> Get()
{
await Task.Delay(1000);
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}

我尝试了所有配置设置,但没有任何改变:`

web.config

  <system.net>
<connectionManagement>
<add address="*" maxconnection="65400" />
</connectionManagement>
</system.net>

aspnet.config

  <system.web>
<applicationPool
maxConcurrentThreadsPerCPU="100" />
</system.web>

machine.config

 <processModel
autoConfig="false"
memoryLimit="70"
maxWorkerThreads="100"
maxIoThreads="100" />

配置针对 x86 和 x64 设置

我有 32 GB 内存和 4 个物理核心,Windows 10。

每秒处理 10 个请求时,CPU 负载不会超过 10%。

上面的代码使用 WEB API,但当然我使用 HTTP 处理程序重现了相同的结果。

最佳答案

这是一个可能的理解。无论如何,有待调查。

Task.Delay() 创建一个新任务,其任务是暂停。如果我理解正确的话,任务通常会被分派(dispatch)到 .Net 工作池,该池的大小有限。 (您可以使用 ThreadPool.GetMaxThreads 进行检查)当您尝试放入太多内容时,代码将“备份”,因为它等待线程池有空间。

假设您有一个大小为 40 的线程池。一旦您分派(dispatch)了 40 个任务,并且全部等待一秒钟,您就耗尽了线程池。你的瓶颈将是任务,堵塞线程池,而不是产生空间。

通常,执行昂贵 IO(例如数据库查询或文件 IO)的任务在等待工作完成时会产生控制。我想知道 Task.Delay 是否更“粘人”。

尝试将 Task.Delay() 替换为 System.Threading.Thread.Sleep() 并查看是否会发生任何变化。

关于asp.net - 对 ASP.NET 并发请求进行基准测试结果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191807/

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