在64位操作系统上,作为32位或64位运行IIS有什么优缺点?

39
可能更适合“Rack Overflow”,但从开发者的角度来看,将IIS(服务于经典ASP和.NET)作为32位进程而不是64位进程在64位Windows主机上运行有什么优缺点?
32/64(iis/server)超过32/32的主要优点似乎是每个IIS进程可以达到4GB的内存。
我期望32/64比64/64更具优势,因为更容易访问旧的32位进程DLL(我们仍然有一个来自合作伙伴供应商的DLL无法立即迁移),并且给定较小的内存指针,可能具有相同代码的较小内存占用量。
是否存在64/64优于32/64的性能优势或任何其他需要现在完全切换的东西?我在这里出现了任何错误的假设吗?

6个回答

39
在64位系统上运行IIS相对于32位系统的唯一性能优势是允许访问更大的内存地址空间。
如果你正在进行正常的ASPX页面处理,那么你可能不需要从任何单个进程中寻址超过4GB。假设你在32位模式下运行,使用同一台机器上的Web-Garden和多个工作进程。在这种情况下,每个进程可以寻址高达4GB。
重要的优势可能出现在进行缓存时。64位进程可以维护巨大的内存缓存(假设你有32GB或更多的RAM来支持它),以允许你在Web服务器上缓存复杂的页面内容或数据。当数据的生成比检索更耗费资源时,这可以提高性能,例如,如果数据是一个详细的表格(比如蒙特卡罗模拟的结果),或者如果数据存储在外部服务器上,网络IO时间比缓存检索时间更昂贵。
如果你不使用缓存,则64位IIS对你没有帮助。它将需要64位指针来进行每次查找,这会使所有操作稍微变慢。
与用于处理服务器(如IIS或其管理的工作进程)的64位服务器相比,像SQL Server这样的数据库或其他数据管理服务器(比如企业邮件服务器Exchange)要更加有效。通过64位地址空间,需要管理数据的服务器可以将更多的数据保留在内存中,以及索引和其他缓存。这可以节省磁盘IO时间和查询处理时间。大多数Web应用程序不需要从单个进程中寻址超过4GB的内存。

或许一个有用的比喻是:在交通运输中,大型SUV就像64位计算机,而普通的小型乘用车则像32位服务器。大型SUV可以携带更多的物品,有更大的拖车能力、可坐8人,8600磅的最大总重量。但是所有这些都需要付出代价。卡车更重,消耗更多燃料。如果您只需要运载2个人和一个行李袋,您不需要SUV。使用较小的车辆会更快速和更高效。


2
你的类比有缺陷。在64位上,X64进程的性能将比32位的thunked进程更快。特别是在旧的IA64处理器上,thunking会产生明显的开销。 - Roger Johnson
是的。除了一些内存/指针密集型应用程序外,大多数应用程序都可以利用x86_64中更多的寄存器 http://www.phoronix.com/scan.php?page=article&item=ubuntu_32_pae&num=1 - phuclv

4
我不认为您有任何错误的假设。但我要说,您所列举的情况之间可能没有性能差异。在Windows上,32位和64位之间没有操作惩罚。64位运行在64位系统上可能会提高一些性能,但这是可疑的。使用32位进程可能会节省一些内存,但这很可能被首次运行进程所需的 thunking 抵消。
唯一的好处就是您提到的 DLL 问题。如果您需要使用特定的64位程序,那么这也可以成为升级的原因。

在运行64位进程时,多出来的寄存器怎么样?它们应该可以提高应用程序的性能。 - LanceSc
如果Windows不代表32位进程使用额外的寄存器,那么可能确实存在一些收益。我对底层的东西了解不够,无法回答这个问题。 - TheSmurf
4
关于“*64位在64位操作系统上可能会略微提高性能,但这是可疑的。”的说法,实际上仅仅使用64位并不能带来神奇的性能提升。事实上,如果您处于64位模式下,则需要支付每个指令的成本。每次指针移动都需要64位宽度,每次比较也是如此。这些操作可能比32位版本需要更多的CPU周期。仅当您的应用程序需要访问大于4GB的内存空间时,64位才有性能优势。在其他情况下,64位的成本更高。 - Cheeso
4
请参考以下链接,其中包含有关在32位模式下运行IIS应用程序的工作进程的详细信息: http://learn.iis.net/page.aspx/201/32-bit-mode-worker-processes/附注:此链接中提供的内容已涵盖了MSDN博客文章“iis最佳实践”中提到的相关主题。 - Josh

3
我曾有一个经历,在从运行IIS 6的32位Windows 2003 Server转移到64位Windows 2003 Server时,ASP.NET 3.5网站的性能不可接受。64位服务器始终比32位服务器慢了2秒。
将IIS 6切换为32位工作进程后,性能再次相等且可比较。
我没有验证过,但我认为这可能只适用于IIS6 win2k3,因为我所做的使用IIS7 x64 (Vista)和64位IIS工作进程的测试似乎表现良好。
更改为32位进程的过程非常简单。下面是支持详细信息的KB文章链接: http://support.microsoft.com/kb/894435/en-us ASP.NET 2.0,32位版本 要运行ASP.NET 2.0的32位版本,请按照以下步骤操作:
  1. 点击“开始”,点击“运行”,输入“cmd”,然后点击“确定”。
  2. 输入以下命令以启用32位模式: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
  3. 输入以下命令以安装ASP.NET 2.0版本(32位),并在IIS根目录和下面安装脚本映射: %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
  4. 确保ASP.NET版本2.0.50727(32位)在Internet信息服务管理器中的Web服务扩展列表中设置为允许。

请参阅KB文章以返回到64位设置。


0

关于内存可用性,请参考msdn博客

内存可用性。对于我的应用程序,我们从32位操作系统上的32位进程切换到64位操作系统上的32位进程,而无需更换第三方库,就获得了所需的内容。因此,我们就停在这里了。好处是:1)每个IIS工作进程可用的有效内存增加了2-3倍;2)在32位操作系统中,如果网站使用大量内存,则其他系统进程和网站会竞争有限的总内存。对于您的应用程序,请查看您的工作进程使用多少内存。如果每个WP没有使用大量内存(超过1GB),那么64位工作进程不会有太大帮助。

为了性能,我认为你必须在两种配置下测试自己的应用程序。上面Dave的帖子表明你可能会在64位系统下出现性能下降。就像cheeso所指出的那样,一些应用程序可以从缓存中获得好处(2GB+的缓存很多,虽然)。除了有限和简单的应用程序之外,我认为我们不能做出性能概括。我们可以指出特定技术的表现更好或更差。

0
除了明显的内存差异外,64位操作系统上的32位进程必须在称为“Windows on Windows”或WOW模式下运行。这基本上是一个thunking/仿真层。如果你足够关注,就会有性能损失。

0
这是微软的实际建议:“我们建议您在64位Windows上配置IIS使用32位工作进程。不仅兼容性比本机64位更好,而且性能和内存消耗也更好。”
请参考上面其中一条评论中发布于2020年5月14日的链接: https://learn.microsoft.com/en-us/iis/web-hosting/web-server-for-shared-hosting/32-bit-mode-worker-processes 我不能确切地解释为什么,但这个建议非常清晰,因为64位工作进程的虚拟地址空间更大,所以32位工作进程通常更有效率。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接