【发布时间】: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