我们最近有一个新的生产服务器构build为服务ASP.NET 4.0业务应用程序。 新服务器的规格是Windows Server 2008 R2,2核Xenon,IIS 7.5,2Gb RAM(即将成为4Gb)。 在新服务器之前,我们一直在Windows Server 2003单核,IIS 6,4Gb RAM上运行/testing应用程序。
我们的应用程序使用ASMX Web服务来validation使用LDAP的Active Directorylogin。
我们立即注意到,从新服务器点击Web服务时,响应时间显着增加,但仅在“首次点击”时才响应。 奇怪的是,99.9%的响应时间是“15秒”(15000到15999ms之间)。 随后的命中会导致所有用户的典型响应时间(<100ms – 300ms)。 但是,等待2-3分钟以上,将会导致这种“首次受到攻击”的行为再次发生。
旧服务器上同一服务的响应时间不会超过300毫秒…即使在重新启动IIS6之后。
旧的和新的服务器的跟踪路由是完全相同的。 与Ping响应时间相同。
经过多次testing后,唯一可靠的重现(并由此定义“首发”)的方法是:
a)等2-3分钟,或者
b)回收应用程序池,或者
c)重新启动IIS
该应用程序使用.NET 4.0 Framework在自己的应用程序池下运行。
这里是应用程序和IIS的当前状态:
- 所有池的所有回收都已closures(空闲超时和固定间隔)
- Web.config中没有debugging引用
- 应用程序是预编译的(通过Visual Studio发布)
- pipe理stream水线=集成
- 身份=networking服务
- 以64位模式运行(更改为32位模式不起作用)
我首先想到这是一个循环利用的问题,因为我看过很多与此相关的post。 然而,这并不能解释为什么在等待2-3分钟之后发生“首次打击”行为。
我没有尝试过的唯一的事情就是IIS热身。 这是因为:a)我没有权利安装它,b)在我看来,“首击”是实际的login页面,而不是服务(除非我错了)。 login页面在300毫秒以内加载,无论是否“首次打”。
另一个说明…我们实际上有两个新的prod服务器,这是相同的。 我们其中一个应用程序在两台服务器之间使用负载平衡。 这里所讨论的应用程序只位于其中一台服务器上,并没有进行负载平衡。 这可能有什么关系呢..?
希望你能帮助!
所以我们的IT人员最终解决了这个问题。
虽然他们并不完全确定实际问题是什么,但他们认为这是因为我们的域名有两个IP地址(负载均衡)。 由于configuration和启动循环(VMWare),这个问题似乎已经解决了。