我们最近构建了一台新的生产服务器,用于运行 ASP.NET 4.0 业务应用程序。新服务器的规格为 Windows Server 2008 R2、2 核 Xenon、IIS 7.5、2GB RAM(即将升级为 4GB)。在新服务器之前,我们一直在 Windows Server 2003、单核、IIS 6、4GB RAM 上运行/测试应用程序。
我们的应用程序使用 ASMX Web 服务通过 LDAP 验证针对 Active Directory 的登录。
我们立即注意到,从新服务器访问 Web 服务时,响应时间显著增加,但仅限于“首次访问”。奇怪的是,99.9% 的时间里,这种“首次访问”的响应时间为 15 秒(确切地说是在 15000 到 15999 毫秒之间)。后续访问导致所有用户的响应时间都很正常(<100 毫秒 - 300 毫秒)。但是,等待时间超过 2-3 分钟将导致这种“首次访问”行为再次发生。
在旧服务器上,对相同服务的响应时间从未超过 300 毫秒......即使重新启动 IIS6 之后也是如此。
新旧服务器的跟踪路由完全相同。Ping 响应时间也完全相同。
经过大量测试后,唯一可靠的重现方法(从而定义“首次命中”)是:
a) 等待 2-3 分钟,或
b)回收应用程序池,或者
c)重新启动IIS
该应用程序在其自己的应用程序池下运行,使用.NET 4.0 Framework。
以下是应用程序和 IIS 的当前状态:
- 所有池的所有回收均已关闭(空闲超时和固定间隔)
- Web.config 中没有调试引用
- 应用程序已预编译(通过 Visual Studio 发布)
- 托管管道 = 集成
- 身份 = NetworkService
- 在 64 位模式下运行(更改为 32 位模式无效果)
我一开始以为这是一个回收问题,因为我看到过很多与此相关的帖子。然而,它无法解释为什么在等待 2-3 分钟后就会出现“首次命中”行为。
我唯一没有尝试的是 IIS Warm-Up。这是因为 a) 我没有安装它的权限,并且 b) 在我看来,“首次访问”是指实际的登录页面,而不是服务(除非我记错了)。无论是否是“首次访问”,登录页面的加载时间都在 300 毫秒以内。
还有一点需要注意...我们实际上有两台新的生产服务器,它们是相同的。我们的另一个应用程序在两台服务器上使用负载平衡。这里讨论的应用程序仅位于其中一台服务器上,并且没有进行负载平衡。这可能与它有关吗?
希望您能幫忙!
答案1
所以我们的 IT 人员最终解决了这个问题。
虽然他们不确定实际问题是什么,但他们认为这是因为我们的域名有两个与之关联的 IP 地址(用于负载平衡)。自从配置并启动 Round Robin(VMWare)以来,问题似乎已经自行解决。