Web services Azure Web应用上的高响应时间

Web services Azure Web应用上的高响应时间,web-services,azure,azure-web-app-service,performance-testing,message-queue,Web Services,Azure,Azure Web App Service,Performance Testing,Message Queue,我已经开发了一个RESTful api,部署在Azure Web App上。在使用JMeter执行负载测试时,我发现响应时间非常长,即约18秒。这个响应时间让我震惊,因为我公开的端点只接收~1-2KB的文本数据,并将其排入azure服务总线队列 我研究发现: Azure Web应用程序和队列需要位于同一区域是的,他们是 虚拟机的大小很重要我的是S3大的 软件设计需要良好/优化仅控制器排队,无其他操作 为了进行负载测试,我在Azure Web应用程序所在的同一区域设置了一个VM实例,以最小化延迟。

我已经开发了一个RESTful api,部署在Azure Web App上。在使用JMeter执行负载测试时,我发现响应时间非常长,即约18秒。这个响应时间让我震惊,因为我公开的端点只接收~1-2KB的文本数据,并将其排入azure服务总线队列

我研究发现:

  • Azure Web应用程序和队列需要位于同一区域是的,他们是
  • 虚拟机的大小很重要我的是S3大的
  • 软件设计需要良好/优化仅控制器排队,无其他操作
  • 为了进行负载测试,我在Azure Web应用程序所在的同一区域设置了一个VM实例,以最小化延迟。enqueue语句花费的时间以毫秒为单位,因此我想知道在加载serivce时,额外花费的秒数是多少

    EDIT:我的代码创建了一个
    QueueClient
    的实例,我将其重新用于所有请求。代码就是
    ApiController

    ServiceBusManager.GetQueueWriter().Enqueue(data); //data is no more than ~1KB                
    return Request.CreateResponse(HttpStatusCode.OK, "Data enqueued");
    

    可能有几个原因:

  • 您的Azure虚拟机只是过载(即缺少CPU或RAM),因此请确保它有足够的空间来运行。您可以使用或监视VM资源消耗
  • 您的JMeter计算机过载。默认JMeter配置适合测试开发和/或调试,当涉及到负载测试时,请确保遵循以下步骤
  • 问题可能出现在应用程序代码中,使用探查器工具遥测重新运行测试(即使用)-这将允许您检测最重的方法、最大的对象、最慢的数据库查询等
  • 基础结构配置可能不适合高负载。检查应用服务器、数据库和其他中间件设置,确保有足够的线程为JMeter生成的虚拟用户服务,否则请求将排队
    代码在哪里?既然您提到了队列,“响应时间”是RESTAPI调用返回的延迟,还是处理队列消息之前的时间?我看到队列传递延迟变化很大,从几乎瞬间到30秒或更长。您是否研究过服务总线队列客户端的初始化?是否在控制器构造函数中重新创建队列客户端?这可能会很快增加,特别是如果ServiceBus限制了您的连接数量。如果是这样,您应该考虑使用依赖项注入来重用实例。另请参见@McGuireV10响应时间是REST API调用返回的延迟。在这种情况下,队列消息处理只需要300毫秒。@Alexat我有一个singleton类,它创建QueueClient的一个实例,然后我将该实例用于所有请求。1-从门户上的图表中,我看到CPU和RAM没有过载。RAM使用率低于~200MB,CPU使用率也太低。2-或者,我也使用基于Azure云的负载测试工具进行了测试,结果基本相同-响应时间长。3-我已经用代码更新了我的问题,看起来非常简单和直接,尽管我会查看分析器。4-唯一涉及的机器是Azure Web App,我已将其扩展到Azure(独立机器)上的最高产品,时间似乎提高了约8秒,但仍然很高(约8-10秒)