我的老板告诉我,如果真的有必要,我们可以买一台新的网络服务器。我不知道这是否真的有必要,所以我决定问那些可能知道的人。
该网站安装了 IIS 6.0 和 Apache。IIS 仅托管一个应用程序,该应用程序是长轮询应用程序(消耗大量线程)。
当前机器是具有两个 CPU(可能是一个物理 CPU,但两个逻辑 CPU)的 Windows 2003。
我们每天有大约 3,000 名独立访客。
当您输入地址并按回车键时,初始加载有时甚至需要一分钟以上的时间。
我尝试通过增加 maxWorkerThreads、maxIoThreads 和其他进程模型属性来微调 IIS,但没有多大效果。
购买更好的机器有什么用处吗?好多少?有什么建议吗?
有什么建议可以提供帮助并且不需要购买新机器吗?
编辑:这是当前系统信息
计算机:Intel(R) Xeon(R) CPU 5130 @ 2.00 GHz,2.00 GB RAM
操作系统:Microsoft Windows Server 2003,标准版,Service Pack 2
如果您需要有关该系统的其他信息,请告诉我。
答案1
如果您可以迁移到新的 6 核或更多核的服务器,配备 12GB 的现代内存、新磁盘、较新的 64 位服务器操作系统和所有代码要求的最新版本,您应该会看到整体速度提高 2 到 20 倍,事实上可能更多。
答案2
这有点厚颜无耻,但看到Noob的软件问题后,StackOverflow 上的这篇文章我实际上不建议升级服务器。特别是正如 noob 提到的,他的 CPU 时间不超过 50%。
您面临的问题(我认为)是您的第一个请求移动到软件的 60,000 毫秒超时异步回调代码中。
我认为您需要做的是更改软件,以便在第一次请求时直接传回结果,而无需文件系统监视。检索当前数据并尽快回发,只要您可以获得代码即可。
在异步回发中,按原样实现您的软件。
您可以使用以下方法确定该页面是首次请求,还是回发请求:页面.IsPostBack财产。
从我所见的代码来看,这应该允许您的访问者在大约 1-5 秒内获取页面,然后仅在 60 秒超时内保持异步回调。
抱歉,我用 stackoverflow 的答案劫持了 serverfault 线程 =(
答案3
- 找出瓶颈,检查 CPU 利用率、RAM、网络、磁盘 I/O
- 该应用程序是否有数据库,它是本地服务器/网络还是远程网络?
发布此信息以便获得其他人的更好的反馈。
答案4
不要买更大的盒子
Web 服务(与数据库服务不同)通过添加大量小型服务器来代替一台大型服务器,可以获得更多好处 - 而且由于您已经通过 HTTP 运行了大量长轮询,因此尤其如此。越来越多的问题变成了打开的连接数、正在运行的进程数、网络缓冲区的大小、系统切换上下文的速率等问题……
因此,如果出去花费 4000 美元购买 2 台服务器,那么比在单台服务器上花费更多钱要快得多。
还有一个巨大的额外好处 - 假设您的服务器的可用性为 99% - 假设没有共享依赖关系,那么 2 个节点的可用性为 100-100*(0.01*0.01) = 99.99% - 其可靠性几乎提高了一百倍。
虽然您可以通过调整来大大加快当前系统的速度,但我们需要更多地了解工作负载的性质和当前配置 - 即使这样,也需要大量的工作和测试才能获得最佳解决方案 - 有几本关于这个主题的好书 - 去读一些吧。
话虽如此,有时升级(或最好添加)硬件是唯一的解决方案 - 而且通常在您用尽调整工作之前它可能是最具成本效益的解决方案。