我们使用的是双 CPU 的 Windows 2003 服务器,IIS 被请求淹没,无法处理这些请求,但同时它只使用了不到 20% 的 CPU 和不到 40% 的 RAM。当服务器无法处理任何请求时,不仅无法浏览网站,甚至无法提供我们其他网站上使用的图像。我们正在考虑安装 VMWare,在这台机器上安装 2 个服务器,使用一个服务器提供 asp.net 页面,另一个服务器提供图像和简单的 html 页面。你们知道我们如何将图像和 html 页面请求路由到一个服务器,将 aspx 页面请求路由到另一个服务器吗?
任何想法都值得赞赏。
谢谢你,丹尼斯
答案1
嗯,每秒有多少个请求(分为静态和动态)我们谈论的是哪个硬件?您的帖子没有提供具体信息,但 IIS 应该不堪重负,但仍然只使用 40% 的 CPU,这听起来有点奇怪。
我绝对不会为此使用 VMWare。虚拟化是一项很棒的技术,有很多很好的用途,但这不是其中之一。所有虚拟化都比在“裸机”上运行有性能开销,这会让你在这种情况下变得更糟。
深入研究日志文件,并查看性能监视器指标了解 CPU、网络 I/O、磁盘 I/O 和 RAM 使用情况,看看这是否为您指明了任何特定的方向。
IIS 前面是否有任何可能过载的设备?廉价的 SOHO 防火墙、任何 HTTP 代理、任何“内容检查”防火墙或 IDS 系统?
您正在运行的 aspx 代码,您看过了吗?它是否有任何愚蠢的设计决策可能会导致整个计算机暂停,例如进行大规模磁盘抖动或耗尽线程池?
如果服务器确实已经达到极限,并且没有速胜之法,那么可以考虑以下做法:
一种廉价的解决方案可能是设置 2 个 DNS 主机名,即 www.companyname.com 和 static.companyname.com,然后在 IIS 中设置 2 个站点,一个针对静态文件服务进行优化,一个针对动态内容 (aspx)。对于静态文件,我通常会启用持久 HTTP 连接,对于动态内容,我会禁用它。优化可能会让您在性能方面获得一些喘息空间,但这可能还不够。据我所知,在 IIS 6 中无法保证站点之间的特定资源分配。
分离静电的最佳方法内容是将所有静态文件服务完全移出服务器,要么专门为该任务配备一个新服务器,要么更好的是使用 CDN。
低端 CDN 的价格已大幅下降,Amazon S3 + Cloudfront、CacheFly 和其他 CDN 的入门价格都很低。当然,添加 CDN 意味着在您的整体架构中增加另一个单点故障,但由于其分布式特性,CDN 大多擅长保持高正常运行时间。添加 CDN 可能会让海外用户感觉您的网站速度更快。
答案2
您确定问题出在服务器上,而不是您的带宽或打开的连接数(可能是在防火墙上)?
尝试使用 Windows 的性能监视器收集一些数据。在设置虚拟服务器之前,您还可以尝试将 Web 隔离,并将它们放在不同的应用程序池中。
答案3
“无法处理”是什么意思?IIS 会抛出错误吗?access_log 或 HTTPERR 日志中有什么内容吗?
除了网络带宽,我还会查看磁盘活动和内存。如果已提交的内存超出了机器中的内存量,则可能有一个答案:Windows 必须进行交换,而磁盘将很忙。
如果内存看起来不错,无论如何都要检查磁盘活动:对于传入的请求量来说,它们是否太慢了?
在路由方面,您唯一可以做的就是在服务器前面安装一个代理服务器,该服务器根据 URL 路由请求。这可能是带有 Squid 或 Apache 的 UNIX/Linux 机器,或者带有某种形式的代理服务器的 Windows,或者甚至是专用的负载平衡器硬件。
答案4
也许你可以升级到 Windows Server 2008 和 IIS7 并使用应用程序请求路由。