【问题标题】:How to determine why my asp.net webforms app on azure takes so long to start up?如何确定为什么我在 azure 上的 asp.net webforms 应用程序需要这么长时间才能启动?
【发布时间】:2012-11-08 21:19:01
【问题描述】:

我有一个 ASP.NET (webforms) 应用程序托管在 Windows azure 上,在 XS 大小的实例上。一切都运行良好,除了当我在一段时间不使用该网站后第一次导航到该网站时,它真的很慢 - 比如超过 45 秒!一旦它启动并运行,页面又好又快;这只是需要很长时间的初始负载。

如何诊断这段时间用在了哪里?我已经在 SessionStart 事件中记录(到数据库),并且不同浏览器中的两个请求以 10 秒的间隔开始,都在同一秒内记录,建议我添加的任何日志记录或其他代码在花费所有时间之后才会执行。或者可能是数据库连接需要很长时间。

我意识到有几件事可能会影响这一点,例如

  • 它位于 XS 实例上。它们并不大。

  • 我的代码目前是在调试模式下构建的。这使得需要加载更大的程序集和 pdb 文件,因此它比它可能的要慢。

  • 网站只需一点时间即可加载。这就是人们change the idleTimeout 和可能的回收间隔的原因。

  • 我正在使用相当大的 Telerik 控件,其中包含 32mb 的 dll。 (但没有在第一页使用)。

但我想要一种方法,我可以用它来确定一直在占用什么,例如获得一些关于正在发生的事情和需要多长时间的测量,或者我可以做更多的事情来尝试让它更快地启动。

在我的带有本地数据库和网络的开发机器上,启动时间可能是 5 秒。 可能它只比 XS 实例快 10 倍,但如果是这种情况,我该如何计算出我的本地机器上花费的时间,以便我可以尝试改进它?

【问题讨论】:

    标签: asp.net performance azure webforms azure-web-roles


    【解决方案1】:

    您的 XS 实例没有专用 CPU 且 I/O 性能较低。就像您已经注意到的那样,这可能会影响您的应用程序池的启动速度。您正在加载 Telerik 程序集 (32mb) 的事实会产生一些影响,这不是您可以轻易更改的。

    您可以采取以下措施来改善启动时间:

    1. 使用发布版本配置。这意味着您将拥有更小且可能包含更少代码的优化程序集(取决于预处理器指令)。
    2. 使用 IIS8 中包含的application initialization module(您需要将 osFamily 更改为 3)。 IIS 将确保应用程序立即启动,并将模拟对您的应用程序的请求,以便直接启动它。大多数情况下,这意味着您的用户不会受到初始加载的影响。万一他们在启动时访问了站点,应用程序初始化模块允许您在启动应用程序池时显示加载页面。

    【讨论】:

      猜你喜欢
      • 2022-08-22
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多