Azure Web App 上的高响应时间 [关闭]
Posted
技术标签:
【中文标题】Azure Web App 上的高响应时间 [关闭]【英文标题】:High response time on Azure Web App [closed] 【发布时间】:2018-07-25 03:49:37 【问题描述】:我开发了一个部署在 Azure Web App 上的 RESTful api。在使用 JMeter 执行负载测试时,我发现响应时间很长,即约 18 秒。这个响应时间让我感到震惊,因为我公开的端点只接收约 1-2KB 的文本数据并将其排入 Azure 服务总线队列。
我研究并发现了以下内容:
-
Azure Web 应用和队列需要位于同一区域。 是的,他们是
VM 的大小很重要。 我的是 S3 大型
软件设计需要良好/优化。 控制器只入队,没有其他操作
对于负载测试,我在 Azure Web 应用所在的同一区域预配了一个 VM 实例,以最大限度地减少延迟。 enqueue 语句需要毫秒级的时间,所以我想知道在加载服务时需要额外的秒数是什么?
编辑:我的代码创建了QueueClient
的单个实例,我将其重用于所有请求。代码就是ApiController
中的以下两行代码
ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB
return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");
【问题讨论】:
你的代码在哪里? 既然您提到队列,“响应时间”是从 REST API 调用返回的延迟,还是处理队列消息之前的时间?我发现队列传递延迟差异很大,从几乎瞬时到 30 秒或更长时间。 您是否查看了服务总线队列客户端的初始化?您是否在控制器构造函数中重新创建队列客户端?这可能会很快增加,尤其是在 ServiceBus 限制您的连接数的情况下。如果是这样,您应该考虑使用依赖注入来重用实例。另见docs.microsoft.com/en-us/azure/service-bus-messaging/… @McGuireV10 响应时间是从 REST API 调用返回的延迟。在这种情况下,队列消息处理只需要大约 300 毫秒。 @AlexAIT 我有一个单例类,它创建一个 QueueClient 实例,然后我为所有请求重用该实例。 【参考方案1】:可能有多种原因:
-
您的 Azure VM 只是过载(即缺少 CPU 或 RAM),因此请确保它有足够的运行空间。您可以使用Azure Diagnostics Extension 或JMeter PerfMon Plugin 监控VM 资源消耗
您的 JMeter 机器过载。默认 JMeter 配置有利于测试开发和/或调试,当涉及到负载测试时,请确保您关注 JMeter Best Practices。
问题可能出在您的应用程序代码中,使用探查器工具遥测重新运行您的测试(即使用YourKit .NET Profiler) - 这将允许您检测最重的方法、最大的对象、最慢的数据库查询等。李>
基础架构配置可能不适合高负载。检查您的应用程序服务器、数据库和其他中间件设置,并确保有足够的线程来为 JMeter 生成的虚拟用户提供服务,否则请求将排队。
【讨论】:
1- 从门户上的图表中,我看到 CPU 和 RAM 没有过载。 RAM 使用量低于 ~200MB,CPU 使用量也太少了。 2- 或者,我还使用基于 Azure 云的负载测试工具进行了测试,结果几乎相同 - 响应时间长。 3-我已经用代码更新了我的问题,虽然我会查看分析器,但它看起来非常简单直接。 4- 唯一涉及的机器是 Azure Web App,我已将其扩展到 Azure 上的最高产品(隔离机器),时间似乎缩短了约 8 秒,但仍然很高(约 8-10 秒)以上是关于Azure Web App 上的高响应时间 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 HttpWebRequest 长时间响应超时 Azure Web App
从托管在 Azure 中的 Asp.net Core MVC Web App 获取“响应状态代码不表示成功:502(错误网关)”
在 Chrome 中托管在 Azure 中的 ASP.NET Core Web 应用程序上的异常 HTTP 响应