Windows Azure 上的 ASP.NET 应用程序性能问题

Posted

技术标签:

【中文标题】Windows Azure 上的 ASP.NET 应用程序性能问题【英文标题】:ASP.NET application performance issue on Windows Azure 【发布时间】:2013-03-02 19:29:32 【问题描述】:

我们在 Windows Azure 上部署了一个应用程序作为 Web 角色,我们正在使用 Pingdom 测试页面加载时间:http://tools.pingdom.com/fpt/

Windows Azure 上应用程序的 url 是:http://www.doctorspring.com。 应用程序的加载时间通常在 7 秒左右。 数据库是 SQL Azure 数据库,角色和数据库在同一个区域。

pingdom 结果示例:http://tools.pingdom.com/fpt/#!/CllGggrMz/http://www.doctorspring.com/

示例 pingdom 结果(使用 gzip):http://tools.pingdom.com/fpt/#!/f2TUbR6OX/www.doctorspring.com

怀疑 Azure 可能是问题所在,我们尝试了 Somee 的免费托管: http://www.doctorspring.somee.com 应用在 Somee 上的加载时间约为 3.5 秒。

pingdom 结果示例:http://tools.pingdom.com/fpt/#!/o3gZOjTwH/http://www.doctorspring.somee.com/

这对我们来说是一个巨大的性能问题。 您能否帮助我们了解 Azure 的问题或建议一种方法,我们如何才能克服它?

谢谢, 马尼什

【问题讨论】:

我会使用分析器...例如我们使用这个:code.google.com/p/mvc-mini-profiler ...我们也注意到 Azure 使页面加载速度慢了数十亿倍,但是一旦我们对事物进行大量分析,就需要时间为了性能调整,我们实际上并没有注意到我们的旧主机和我们的 Azure 主机之间的区别。 最近我注意到共享模式下的性能存在同样的问题。刚刚切换到预留实例看看它是否变得更好。 【参考方案1】:

在这两种情况下,加载主页的速度都非常慢 - 生成一个页面需要 3.5 秒,这比网站上没有加载时所需的速度慢了大约 10 倍。我希望网站在这种性能下即使在中等负载下也会崩溃。

在不知道网站是如何构建的情况下,很难解释一个环境比另一个环境快的原因 - 但我的猜测是生成页面的任何原因(某种 CMS?)都是原因。众所周知,Azure 在进行数据库查询时会有点慢——尽管通常这只会在极端条件下表现出来。

我建议调整 CMS - 尤其是缓存。我们发现 Azure 通常非常快,但是在进行数据库查找时(例如,为 CMS 检索内容),它可能是可变的;如果您的 CMS 正在执行大量数据库查询来获取主页内容,那么它会很慢。

运行 Yslow 也是值得的 - 提高性能有一些容易实现的目标。

【讨论】:

谢谢 Neville,我会去找一个分析器,但如果你现在查看两个 url,第二个 url 的 ASPX 请求比第一个更快。我们可以从 Yslow 获得的一切都在那里。这里的重点是两者之间的比较。【参考方案2】:

您在 Azure 中运行哪些服务?网络角色、虚拟机、网站?您是否从主页连接到 Azure 数据库实例(如果是,您进行了多少不同的调用)?我从伦敦获得了大约 7.5 秒的加载时间,但老实说,即使是 3 秒对于主页来说也太慢了。很难知道是什么导致页面加载时间延长,但如果您连接到数据库实例,您可以做很多事情,例如

    呈现页面并进行一些异步调用以假脱机附加数据。

    确保您的 Azure 服务运行紧密

    考虑将数据库内容缓存到 blob。例如。对于“过去 24 小时内回答的医疗问题”中的数据,如果您在每次加载时都从数据库中提取此数据,则可以通过定期将其缓存到存储在 blob 容器中的 html 文件并将其注入页面来大大加快访问速度。

    如果您必须从主页进行数据库调用,请尝试通过将查询批处理到存储过程中来尽可能少地进行往返。

我在这里做了很多假设,但您当然可以采取一些措施来大幅提高此页面的性能。

【讨论】:

我同意这些观点,它们在待办事项列表中。然而,这两个平台的性能差异才是真正的问题。 当您切换到 Somee.com 时。数据库还在 Azure 上吗? 不,我在 somee.com 上有数据库。 如果您与 Somee.com 在同一个盒子上运行数据库,我认为这可以解释很大一部分差异。在 Azure 中,您的网络角色需要通过网络来回传输数据(它是一个大数据中心),因此如果您进行许多不同的调用,它在 Azure 中的运行速度可能会慢很多。我们遇到了同样的问题,不得不花费大量时间重新设计我们与数据库的交互方式。最后,我们使用 Azure 在不到一秒的时间内加载了许多页面,这些页面从许多不同的表中提取数据。只是一个想法..

以上是关于Windows Azure 上的 ASP.NET 应用程序性能问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Azure AD OpenID - 生产服务器上的令牌签名验证失败

为啥 Azure Web 角色上的 IIS 需要如此频繁地重新编译 ASP.NET 应用程序?

在 Chrome 中托管在 Azure 中的 ASP.NET Core Web 应用程序上的异常 HTTP 响应

在 Asp.Net Core Web 应用程序中使用 EasyAuth 对 Azure 应用服务上的 AAD 进行身份验证时,无法填充 ClaimsPrincipal

ASP.NET HttpContext 在 Azure 上为空

如何使用 Windows Azure 实现 URL 重写?