我们看到MVC 5网站的性能存在一些重大问题。当我在一个基本页面上对我们的网站(PAAS)进行轻量级性能测试(大约15-20请求/秒)时,性能工具(我同时使用JMeter和Visual Studio Enterprise 2015 RC)报告每个请求的响应时间大约为500毫秒。 IIS日志也会报告每个请求大约500毫秒。请注意,在这些测试期间,我只使用1个S2实例。
奇怪的是,Application Insights报告说这些请求的响应时间大约为150毫秒,因此我“丢失”了大约350毫秒。这些页面的响应很小,只有大约10KB,所以我真的不希望350ms进行数据传输等。
我还使用System.Diagnostics.Stopwatch
添加了自定义日志记录,以挂钩我的请求生命周期的各个阶段。在查看this图表后,我使用自定义ControllerFactory.CreateController
方法启动了我的秒表,并在我的Controller.OnResultExecuted
方法中停止,我认为该方法涵盖了完整的请求。这可以通过秒表的经过时间与Application Insights报告的响应时间大致相同的事实得到支持。我在这里错过了相同的350毫秒!
其他一些信息: - 我测试的页面是一个没有外部Web服务或数据库的简单页面 - 整个测试过程中CPU使用率保持低水平,最高约30% - 该网站位于西欧,据称是阿姆斯特丹。在本地测试时,我希望我住在40英里外的时间非常短。 - 我已经从Azure北欧完成了一项测试,结果相同
我觉得有些东西受到限制,因为CPU很低,但响应时间很长。我不太清楚Azure知道什么和哪里。我很感激每一个建议。谢谢!
答案 0 :(得分:3)
进一步调试后,似乎在构建某些服务和控制器时,我们会使用WebConfigurationManager
读取应用程序设置。
事实证明,Azure上的慢。由于您可以覆盖Azure管理门户中的硬编码配置设置,因此每次查找设置都会执行一些内部调用,以查看是否覆盖了此设置。
现在这可能不是最大的性能问题,如果您的网站流量很小,而且每次请求只执行一次,因为每次查询可能需要15毫秒。但是如果你为每个请求执行7次这样的操作(我们有很多凭据可用于各种API,域设置,所有这些都是可配置的),并且你有100个reqs / sec,那么,做数学运算。它会破坏您网站的性能。我们现在将这些设置写入某些Singleton设置对象,并且性能大幅提升。
这也解释了CPU低的原因,因为它正在等待一些外部呼叫完成。 CPU什么也没做。