Azure Web App上的高响应时间

时间:2018-02-14 14:22:29

标签: web-services azure azure-web-sites performance-testing message-queue

我开发了一个部署在Azure Web App上的RESTful api。在使用JMeter执行负载测试时,我发现响应时间很长,即〜18秒。这个响应时间让我感到震惊,因为我暴露的端点只接收了大约1-2KB的文本数据并将其排入天蓝色服务总线队列。

我研究过并发现了以下内容:

  1. Azure Web App和Queue需要位于同一区域。 是的
  2. VM的大小很重要。 我的是S3 Large
  3. 软件设计需要优秀/优化。 控制器仅排队,无其他操作
  4. 对于负载测试,我在与Azure Web App相同的区域中配置了VM实例,以最大限度地减少延迟。 enqueue语句需要花费几毫秒的时间,所以我想知道在serivce处于加载状态时需要额外的秒数?

    编辑:我的代码创建了ApiController的单个实例,我将其重用于所有请求。代码只是ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");

    中的以下两行
    {{1}}

1 个答案:

答案 0 :(得分:1)

可能有几个原因:

  1. 您的Azure VM过载(即缺少CPU或RAM),因此请确保它有足够的空间来运行。您可以使用Azure Diagnostics ExtensionJMeter PerfMon Plugin
  2. 监控VM资源消耗
  3. 您的JMeter机器超载。默认的JMeter配置适用于测试开发和/或调试,当涉及到负载测试时,请确保您正在关注JMeter Best Practices
  4. 问题可能在您的应用程序代码中,使用分析器工具遥测重新运行测试(即使用YourKit .NET Profiler) - 这将允许您检测最重的方法,最大的对象,最慢的数据库查询等。
  5. 基础架构配置可能不适合高负载。检查您的应用程序服务器,数据库和其他中间件设置,并确保有足够的线程来为JMeter生成的虚拟用户提供服务,否则请求将排队。