【问题标题】:Asp.net request queued in IIS even with low traffic and CPU usage is low (CPU:40%,: 50req/sec,20 concurrent users)即使流量低且 CPU 使用率低,Asp.net 请求也会在 IIS 中排队(CPU:40%,:50req/sec,20 个并发用户)
【发布时间】:2022-07-04 17:15:10
【问题描述】:

我正在对 Asp.Net WebApi(Windows 2019 服务器/8CPU 内核上带有 IIS 10 的 .Net 4.7.2)进行一些压力测试,我观察到即使流量较低,大部分请求似乎也已排队. api的平均响应时间为300毫秒。 这是我在 debudiag 中看到的 http 请求:

HttpContext Report

HttpContext Timeout Completed RunningSince ThreadId ReturnCode Verb             RequestPath+QueryString 
65ac4d8 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
65aea9c 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
66bf520 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
6b256ec 110 Sec     No  2 Sec 56    200 POST                /WS_TEST/Orders/Aborted  
8506498 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
a5b81ec 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
a752e98 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
c64d35c 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
c843028 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
e562f54 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
e901974 110 Sec     Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
108cc6fc 110 Sec    Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
126159c4 110 Sec    Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
12c08d94 110 Sec    No  2 Sec 61    200 POST                /WS_TEST/Orders/Aborted  
1464e364 110 Sec    Yes     ---         200 POST                /WS_TEST/Orders/Aborted  
147b4488 110 Sec    No 2 Sec 41         200 POST                /WS_TEST/Orders/Aborted  

这是 windbg 为我提供的线程池统计信息:

0:000> !threadpool
CPU utilization: 48%
Worker Thread: Total: 27 Running: 6 Idle: 17 MaxLimit: 8191 MinLimit: 8
Work Request in Queue: 0

在我的负载测试中,我有一个有 20 个线程的客户端,总是在一个循环中运行相同的请求,所以我希望看到 CPU 做更多的工作,因为应该总是有 20 个请求待处理(我的客户端没有暂停脚本)。不过好像不是这样的。。 在分析了很多转储之后,我注意到了一件奇怪的事情:我只是在任何时候看到最多 3 到 5 个请求似乎是同时处理的。

我没有看到任何线程在同步后被阻塞或等待。 那么导致这种行为的原因可能是什么?
默认线程池配置? 接下来我应该检查什么?

【问题讨论】:

  • at max 5 request 你是在 Windows 10/11 这样的桌面操作系统上测试这个吗?也许使用 IIS Express?
  • 不,我在 Windows 2019 服务器上。 : 它是一个 8 CPU 核心。如果我增加 500 个并发用户的负载,我可以在 70/80% 的 CPU 负载下达到 200 请求/秒。Api 需要 300 毫秒来响应。我不明白为什么我不能有更多的并发请求......

标签: asp.net performance threadpool


【解决方案1】:

这是因为您的应用程序池只使用一个工作进程。 您可以将最大工作进程增加到一个以上 你可以这样做 选择您的应用程序池,单击高级设置, 找到Maximum Worker Processes并更改了数量

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2015-10-30
    • 2023-03-27
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多