我们的 Web 服务器有问题。它运行着大约 35 个 ASP.NET(大部分是 4.0)网站,使用的是 Windows Server 2008 R2 和 IIS 7.5。它在今年 1 月中旬已经打上了补丁。
症状:
- 间歇性地性能极慢
- 某些请求似乎从未被处理,导致 ViewState 错误
- 浏览网站时总体反应迟钝,浏览器旋转着等待响应
有关服务器的一些可能重要的事实:
- 它运行在一台非常强大但利用率很低的服务器上的虚拟机中
- 12 GB RAM,4 个虚拟 CPU
有关我们的 ASP.NET 站点的一些可能重要的事实:
- 在低频下,我们同步从网站发送电子邮件
- 由于我们会即时创建 PDF 和报告,因此有些请求会同步长时间运行。这些请求可能需要超过 30 秒才能完成。
- 每个站点都有自己的应用程序池,1 个工作进程(无网络花园),午夜回收
一些性能计数器事实:
- ASP.NET 性能计数器显示每秒请求数在 10 到 50 个之间
- W3WP 进程性能计数器显示每个进程10 至 45 个线程,1,000句柄总数在 30,000 到 40,000 之间(有波动)。
- CPU 使用率大部分时间在 0% 到 10% 之间;在长时间运行请求(PDF 或报告生成)期间可能会飙升至 30%。
我真的很困惑,为什么我们的性能如此糟糕。我怀疑这与某些线程池/句柄限制有关 - 我读到大约 40,000 个句柄会大大降低服务器性能等,但我不知道如何控制它。
总体来说很明显某物阻止 IIS 解锁 VM 的功能... CPU 大部分时间处于空闲状态,使用率很低。有什么帮助吗?
答案1
40,000 个句柄?看看别处,当我阅读此网站时,我刚启动的笔记本电脑的句柄数为 56,000。您正在查看的文档可能是 90 年代的!
您描述的症状与网络问题一致。
如果可以重现,我会同时从服务器和客户端抓取网络捕获。如果不能重现,我会单独从服务器抓取一个,然后寻找连接问题的迹象(基本上是:重新传输)。