我已经开发了我在Azure Web应用程序上部署的Restful API。在使用Jmeter进行负载测试时,我看到响应时间很大,即〜18秒。这个响应时间使我感到震惊,因为我暴露的终点只收到〜1-2kb的文本数据,并将其招募到Azure Service Bus队列。
我已经研究并找到了以下内容:
- Azure Web应用程序和队列需要在同一区域。是的,他们是
- VM的大小很重要。我的是S3大
- 软件设计必须是好的/优化的。控制器仅着出来,没有其他操作
对于负载测试,我在与Azure Web应用程序同一区域中提供了一个VM实例,以最大程度地减少延迟。顾问声明需要以毫秒为单位的时间,所以我想知道在加载时要花费额外的几秒钟?
edit :我的代码创建一个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扩展名或Jmeter Perfmon插件监视VM资源消耗
- 您的jmeter机器被超载。默认的Jmeter配置非常适合测试开发和/或调试,在加载测试方面,请确保您遵循Jmeter的最佳实践。
- 问题可能是在您的应用程序代码中,使用Profiler Tool Telemetry(即使用YourKit .NET Profiler(重新运行测试 - 这将使您能够检测最重的方法,最大的对象,最慢的DB查询等。<<<<<<<<<</li>
- 基础架构配置可能不适合高负载。检查您的应用程序服务器,数据库和其他中间件设置,并确保有足够的线程为Jmeter生成的虚拟用户服务,否则请求将排队。