我们目前正在将 32 位生产服务器升级到更强大的 64 位服务器,同时升级到 ASP.NET 4。但是,在进行一些轻负载测试后,我们似乎发现性能有所下降!
我创建了一个简单的负载测试,其中 20 个用户的恒定负载执行一些简单的用例,并比较了结果:
如您所见,性能最高的配置是带有 ASP.NET 2.0 的现有 32 位服务器。
您可以看到,在 64 位机器上以 32 位模式运行 IIS,其性能与现有的 32 位服务器相当,但在 64 位服务器上以 64 位模式运行 IIS 时,性能明显较差。我不确定这是为什么,因为新服务器更好。
出于某种原因,每次我在 64 位模式下使用 IIS 运行测试时,开始时都会出现一个很大的峰值,然后会趋于平稳,但响应时间仍然比 32 位模式下更长。当我在 32 位模式下运行 IIS 时,峰值会消失。
请注意,应用程序池/应用程序不会在测试之间重新启动,但峰值始终存在且响应高于其他配置。
所以 - 我的问题是:有人知道这是为什么吗?我需要设置任何配置设置吗?有人能指点一下如何缩小导致差异的原因吗?
当前生产服务器:Win Server 2003 - 32位 - IIS6
新服务器:Win Server 2003 R2 - 64位 - IIS6
答案1
根据文档,MS 建议在 64 位服务器上运行 32 位应用程序池,因为 Web 应用程序无论如何都不应使用更多内存(内部)。
32 位应用程序始终具有更高的性能 - 更小的指针意味着特定指令集所需的内存更少,这意味着更好的缓存命中率。
64 位进程的意义有限 - 当一个进程确实需要更多内存时。如果你让你的 Web 前端只做这件事(前端),那么它就没有理由需要那么多内存;)
最重要的是,升级到性能更高的版本确实有意义。IIS6 在性能方面非常糟糕 - IIS 7.5 好很多,特别是如果你运行 ASP.NET / 托管代码。
答案2
我们在 Windows 2K3 服务器上尝试过这个,得到了同样的结果,当时我并不在这里,但这与 MS 在 2K3 中实现 64 位 .Net 的方式有关(不确定是什么,但告诉我的人是 MVP,所以我相信他的话。)
只是想让你知道,如果你转到 Win2K8,你可能会看到和我在这里的服务器上看到的一样的事情,并遇到同样的性能问题。根据我所听到的和一些阅读,为了利用 64 位 .Net,建议使用集成管道(http://msdn.microsoft.com/en-us/magazine/cc135973.aspx)
抱歉,这不能回答您的问题,但我想让您知道,您不是唯一看到这个问题的人。