【问题标题】:IIS holding up requests in queue instead of processing thoseIIS 在队列中阻止请求而不是处理这些请求
【发布时间】:2024-05-20 14:15:01
【问题描述】:

我正在对 Azure 中托管的应用程序执行负载测试。它是一个云服务,在内部负载均衡器后面有 3 个实例(基于哈希的负载均衡模式)。

当我执行负载测试时,即使请求/秒和对 IIS 的总当前请求非常低,它也会对请求进行排队。我不确定可能是什么问题。

有什么建议吗?

添加一些性能计数器的屏幕截图,这可能有助于您做出决定。

点击图片查看原图。

Edit-1:根据 Rohit Rajan 的请求,

云服务有 2 个实例(即 2 个虚拟机),每个实例都有 14 GB 的 RAM 和 8 个内核。 我正在执行从 100 开始的分步加载模式,每 5 分钟添加 100,150 个用户,直到 4-5 小时,直到负载达到 10,000 VU。

对外部系统的任何调用都是异步写入的。数据库调用是同步的。

【问题讨论】:

  • 您的 azure VM 中有多少个内核。我看到 CPU 是 100%。负载测试是什么样的,你发送了多少并发请求?您能否在有关如何进行负载测试的问题中添加更多详细信息,您正在测试的负载是什么?您有多少个内核和内存用于 VM 等。你的应用程序是异步编写的吗
  • @hiren desai,你使用的是什么框架? ,我假设您正在使用会话并为并发请求重用会话 ID,ASP.NET 将对请求进行排队,因为它需要对每个请求的会话进行独占锁定。尝试更改 web-config 中的默认并发请求
  • @Webruster,不,我们没有使用会话。整个应用程序中只有 1 页使用了未在此测试中测试的会话。 “尝试更改 web-config 中的默认并发请求”你的意思是什么?
  • @HirenDesai 我的意思是说您不需要使用会话,但 asp.net 应用程序将在会话上运行,所以我正在解释这种行为,对于您的第二个问题,请参考以下@ 987654325@

标签: asp.net azure iis iis-7 performance-testing


【解决方案1】:

您的问题没有直接的答案。一种可能的方法是探索其他调查选项。

根据您的解释,应用程序中似乎存在导致请求排队的瓶颈。

为了对此进行调查,请在看到请求排队时收集内存转储,然后使用 DebugDiag 对其运行挂起分析。

有几种方法可以收集内存转储。

  1. 任务管理器
  2. Procdump.exe
  3. 调试诊断
  4. Process Explorer

获得内存转储后,您可以安装调试诊断,然后对其进行分析。它将生成一份报告,可以帮助您入门。

调试诊断下载:https://www.microsoft.com/en-us/download/details.aspx?id=49924

【讨论】:

  • 对此,我在确定这些请求何时排队时遇到了挑战。原因是,应用程序托管在云 (Azure) 中,并且在运行时了解多个实例的这些计数器是一个挑战。无论如何,我仍在探索这个选项。但是你认为,这可能与记忆有关吗?我有内存利用率图表,在整个运行期间我可以看到它的 20% 利用率!
  • 不看内存转储,我不能说。 20%是正常的。 Debug Diag 分析报告告诉您什么?
  • 我还没有运行它。这只是基于我之前的结果分析的一个问题。我会尽快发布。