Windows/IIS 虚拟主机上的长延迟

Windows/IIS 虚拟主机上的长延迟

我们有一台开发服务器,上面有大约 10 个相同的虚拟站点。每当我们打开其中一个站点时,它都非常慢(登录页面最多需要 30 秒才能显示)。登录后,应用程序速度明显加快,尽管每个页面的延迟仍然很高。

由于原因可能有很多,我希望得到一些关于如何查明延迟发生位置的建议。

设置非常传统。硬件服务器(不是 VM)具有单个 CPU 和 16GB RAM。它大约有两年历史,运行 Windows 2012、SQL 2012 和 IIS 8。每个虚拟站点都是基于 SQL 服务器的 Web 应用程序,使用 ASP.NET/C# 和 SSL。

下面的链接说明了延迟。

这是首次访问其中一个网站时看到的内容:

https://gyazo.com/27d67dd12dbb195d9171b6547b851253

登录后,页面之间移动仍然存在不可接受的延迟:

https://gyazo.com/a992fe6ebc3a169c6036b7767a88d92b

https://gyazo.com/956202b807ab2f94485b187d94117327

如果我让会话过期(大约 10 分钟)并再次登录到同一站点:

https://gyazo.com/f704f01f4b94c88cf9fcef5445532fd1

我们已经实现了 Stackify,它提供了一些跟踪信息,但我不确定如何使用它来观察(也许是实时观察)某个特定用户拉取某个特定页面。

除了向某些日志文件插入调试打印语句外,我们还能做些什么来了解为什么会出现这些长时间的延迟?IIS 似乎不会立即更新其日志,所以我甚至不确定如何检查 IIS 何时收到请求。

当然,我们已经从不同的地方进行了检查,以消除从一台客户端电脑到服务器的网络问题。

谢谢!

答案1

初始加载部分是应用程序的加载部分。在开发服务器上,您通常不会激活 keepalive(即使不使用时也会保持应用程序处于活动状态),并且启动速度很慢 - 其中一个原因是所有页面都经过编译。由于您经常通过加载新页面重新启动(它是开发服务器),这意味着不断重新编译。您在那里什么也做不了 - 除非让人们使用副本在本地计算机上工作,并激活 keepalive(但这在开发机器上用处不大)。

.NET / ASP.NET 的设计并不是为了快速启动。它在启动时会做很多事情。您可以在开始测试之前强制手动启动 - 这样就可以将这段时间排除在您的测量范围之外。

如果速度比这慢很多,那就开始基础程序员工作吧。例如,附加一个服务器端分析工具或将 Glimpse 集成到您的应用程序中。这将允许您定位例如缓慢的 SQL 查询(这些通常是罪魁祸首 - 人们滥用数据库)。如果不是 SQL - 确实需要一个分析器。

但是您所描述的主要听起来像是 asp.net 应用程序的标准启动时间。

相关内容