当前位置: 首页 > 知识库问答 >
问题:

Azure Web应用程序(ASP.NET MVC)每10分钟就会变冷,加载需要+10-20s

葛霄
2023-03-14

我对一个Azure Web应用程序有一个非常奇怪的问题,我对此感到非常沮丧。

我们体验到我们的应用程序在使用时非常快速和响应,然而,如果我们不使用它大约十分钟,它有一个非常冷的启动(~10-20秒)。这种冷启动只有在涉及数据库时才会发生。这有点像我们发布web应用程序的时候。

我们的尝试

我们的SQL数据库也托管在北欧(检查了10亿次位置,因为我以前犯过这个错误)。

就像应用程序服务一样,我们选择了一个“太大”的硬件来确保这不会导致问题(标准的S0:10 DTUs)。使用率低得离谱:

我们确实使用了连续部署(deployment options,Azure菜单中的部署选项),但是查看部署,它不应该经常部署某些内容:

编辑和更新1:

我决定再做一些测试。我现在设法通过调用另一个页面来获得显示我们问题的真实数据。具有讽刺意味的是,这个页面不调用数据库,所以虽然我认为这是数据库问题,但它似乎不是这样的。请看这里的挑战(趋势持续+24小时)。

奇怪的是,它的稳定程度正好在10秒左右。而且趋势似乎并不是每10-20分钟一次,而是更接近每5分钟一次--两者之间的间隔完全相同:

登录了我们的应用程序,在Chrome上点击了一下。我发现,我已经访问过的页面显示的是instant(数据来自DB),但如果我打开一个新页面,它会加载得很慢。当我第一次打开页面时,似乎有些实体被缓存了。

然后我尝试在一个新的浏览器中打开应用程序。如果我打开一个页面,我以前在Chrome中打开,它会立即打开。如果我打开了一个我以前没有点击的新页面,它将有大约10秒的加载。

我现在最好的猜测是我使用的实体框架出于某种原因给出了问题。

编辑4:

现在我有了第一个有趣的数字。该应用程序没有被回收。application_start只调用一次。

我可以通过登录endrequestbeginrequest来查看时间差。我可以看到有多个电话在这两个电话之间需要超过+15秒...但当网站温暖时,根据页面的不同,需要0.5-2秒。所以在请求的开始和结束之间发生了一些非常奇怪的事情。进一步调试

奥基多基,我错了。速度慢的是呈现方法,而不是数据库!我不知道怎么调试这个...去谷歌!

编辑7:

是时候进行另一次更新了。状态是:什么都没有解决。

A)尝试使5-10个版本的同一页(没有_布局,有布局,有数据库,没有数据库,有依赖注入,没有...所有这些),所以看看我能不能找到一个模式。

B)尝试将主机移动到虚拟机,看看它是否解决了问题

编辑8-新增遗迹:

http://prntscr.com/jevgeg vs http://prntscr.com/jevgix之间没有任何内容。

共有1个答案

崔高远
2023-03-14

我有几个可能的答案。

实体框架代码优先/数据库初始化:如果您在迁移和种子数据中使用代码优先设置,这些事情都会导致一些“预热”问题。

特别是如果你没有在应用程序启动时初始化数据库,这将意味着你第一次击中你的数据库是在它被初始化的时候。

app_start中,可以创建一个名为razorgeneratormvcstart.cs的文件,其内容如下:

using RazorGenerator.Mvc;

[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(MyNamespace.RazorGeneratorMvcStart), "Start")]

namespace MyNamespace {
    public static class RazorGeneratorMvcStart {
        public static void Start() {
            ViewEngines.Engines.Insert(0, new PrecompiledMvcEngine(typeof(RazorGeneratorMvcStart).Assembly));

            VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
        }
    }
}

razor引擎甚至可以为usephysicalviewsifnewer接受参数,以便那些喜欢替换实时视图的用户使用。在这种情况下,它使用预编译版本,除非文件夹中放置了日期比已编译的.dll更新的视图。

这种方法应该解决视图的性能问题。

 类似资料:
  • 我在Burp Suit Free Edition V1.7.03 的入侵者选项卡中,我能够进行攻击,通常是HTTP请求,但我希望HTTP请求应该每10分钟发出一次,而不是默认的3秒时间间隔(大约)

  • 我们知道,参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。 对于像 char、bool、int、float 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组、结构体、对象是一系列数据的集合,数据的数量没有限制,可能很少,也可能成千上万,对它们进行频繁的内存拷贝可能会消耗很多时间,拖慢程序的执行效率

  • 本机应用程序是安装和执行在资源所有者使用的设备上的客户端(例如,桌面程序,本机移动应用)。本机应用程序需要关于安全、平台能力和整体最终用户体验的特别注意事项。 授权端点需要在客户端和资源所有者用户代理之间进行交互。本机应用程序可以调用外部的用户代理,或在应用程序中嵌入用户代理。例如: 外部用户代理-本机应用程序可以捕获来自授权服务器的响应。它可以使用带有操作系统已注册方案的重定向URI调用客户端作

  • 本文向大家介绍10分钟学会写Jquery插件实例教程,包括了10分钟学会写Jquery插件实例教程的使用技巧和注意事项,需要的朋友参考一下 有很多朋友都用过jquery插件,但是很少有人自己动手写过jQuery插件,本文就以实例形式简单叙述了jQuery插件的实现方法。分享给大家供大家参考之用。具体方法如下:   具体而言,其实就是把一些常用、实用、通用的功能封装起来而以,简单的来讲就是把这些代码

  • 前言 欢迎来到 Apache Shiro 十分钟教程! 希望通过这个简单、快速的示例,可以让你对应用程序中使用 Shiro 有个深入的了解。嗯,10分钟你应该可以搞定它。 概述 Apache Shiro 是什么? Apache Shiro 一个功能强大,使用简单的 Java 安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。 实际上,Shiro 的主要功能是管理应用程

  • 我目前正在开发一个weblogic 10应用服务器,它安装了几个EAR。我收到一个请求,要求更改某些AP的应用程序名称,因为它们出现在 家 我去了合适的计划。xml并使用适当的名称更改,重新启动了域,但名称没有更改。 有什么想法吗?