我的 IIS 应用程序出现了问题(环境的详细信息位于消息末尾)。
该网站大多数时候运行良好,我无法在我们的测试系统中重现任何错误。然而,在实时系统上,平均每秒有 5-15 个请求,我遇到了一个问题,一些请求(约 0.05%)需要 300 多秒才能完成。其他请求在 5-10 秒内完成。
似乎所有错误的请求最终都会在错误日志中出现 Timer_EntityBody 错误。作为最终用户,我从未见过这种情况,但我猜他们会收到某种错误消息。
我正在尝试找出导致此错误行为的原因。欢迎提出任何想法。我读到过一些内容,如果防火墙阻止了 ICMP 和 MTU 协议,则可能存在 MTU 问题。这听起来合理吗?我还读到过更新到 IIS 7 应该可以解决问题。这听起来合理吗?
我认为问题有其他原因,但我不知道是什么原因。我尝试运行性能监视器,监视数据库锁定和活动事务计数。我可以在 MSSQL 服务器(另一台机器)的性能日志中看到其中一些,例如:
- 活跃交易有时会达到峰值,有时会持续很长时间
- 每秒的锁定等待时间有时会达到峰值
- 每秒交易量有时会达到峰值
- 页面 IO 闩锁等待有时会达到峰值
- 锁定等待时间(毫秒)有时会达到峰值
但我看不出这些与 IIS 错误日志中的错误有任何关联。
在 IIS 服务器上,我还可以通过 perfmon 看到某些值在一天内会出现几次峰值:
- 请求执行时间
- 平均磁盘队列长度
我看不出这些与 IIS 错误日志中的错误有任何关联。
在下面的代码中,我通过将一些部分替换为 HIDDEN 来实现匿名化,可以在访问日志中看到以下内容
2010-10-01 08:35:05 W3SVC1301873091 **HIDDEN** POST /**HIDDEN**/Modules/BalanceModule.aspx - 80 - **HIDDEN** Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E) ASP.NET_SessionId=**HIDDEN** 400 0 64 0 2241 127799
同时在错误日志中可以看到如下内容:
2010-10-01 08:35:05 **HIDDEN** 1999 **HIDDEN** 80 HTTP/1.0 POST /**HIDDEN**/Modules/BalanceModule.aspx - 1301873091 Timer_EntityBody Test+Pool
我可以讲述以下有关环境的情况:
Server: Windows Server 2003 x64 SP2 running on VMWare
HTTP Server: IIS v6.0 with ASP.NET 2.0.50727
Antivirus: Trend Micro OfficeScan (Is it a good idea to have this on a server?)
答案1
如果没有更多详细信息,更新到 IIS 7 不太可能有帮助。遇到问题时的任何升级建议往往都是那些不想花时间真正排除故障的人给出的猜测。
此外,对于 MTU 问题 - 我发现网络层配置不匹配的问题(使用 Windows 2008 时,两台机器由于不同的滑动窗口定义而无法同步连接)。但这应该会影响所有用户,而不仅仅是部分用户。
杀毒软件本身并无好坏之分,这取决于您是否在服务器上上传/下载文件。不过,它可能对这个特定问题没有影响。
这可能适用于你的情况: http://support.microsoft.com/kb/817439
这似乎是可能的,因为您的请求执行时间确实显示增加。
最后,由于您在 VMWare 上运行,因此不时出现的一个问题是磁盘 IO 管理不当 - 您可能需要与托管您的 VM 的人核实,看看他们是否看到磁盘 IO 总体上增加(无论是存储 VM 的地方还是仅在您的机器上)。延迟可能是因为共享存储上其他人的机器正在占用 IO 带宽(这会延迟整个 Web 服务器的读取/写入,从而可能增加您看到的计数器...)。