我开发了一个 RESTful API,并将其部署在 Azure Web App 上。在使用 JMeter 执行负载测试时,我发现响应时间很长,即约 18 秒。这个响应时间让我感到震惊,因为我公开的端点仅接收约 1-2KB 的文本数据并将其排入 Azure 服务总线队列。
我研究并发现以下内容:
- Azure Web App 和队列需要位于同一区域。 是的
- 虚拟机的大小很重要。 我的是S3 Large
- 软件设计需要良好/优化。 Controller 只进行入队,没有其他操作
为了进行负载测试,我在与 Azure Web App 相同的区域中预配了一个 VM 实例,以最大程度地减少延迟。入队语句花费的时间约为毫秒,所以我想知道在服务加载时是什么花费了额外的秒数?
编辑:我的代码创建 QueueClient
的单个实例我将其用于所有请求。代码就是 ApiController
中的以下两行
ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB
return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");
最佳答案
可能有多种原因:
- 您的 Azure VM 很容易过载(即缺少 CPU 或 RAM),因此请确保它有足够的运行空间。您可以使用 Azure Diagnostics Extension 监控虚拟机资源消耗情况或JMeter PerfMon Plugin
- 您的 JMeter 机器过载。默认 JMeter 配置有利于测试开发和/或调试,在进行负载测试时请确保遵循 JMeter Best Practices 。
- 问题可能出在您的应用程序代码中,请使用分析器工具遥测重新运行测试(即使用 YourKit .NET Profiler ) - 这将允许您检测最重的方法、最大的对象、最慢的数据库查询等。<
- 基础设施配置可能不适合高负载。检查您的应用程序服务器、数据库和其他中间件设置,并确保有足够的线程来服务 JMeter 生成的虚拟用户,否则请求将排队。
关于web-services - Azure Web App 响应时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789445/