在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是啥?

Posted

技术标签:

【中文标题】在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是啥?【英文标题】:What are the pros and cons of running IIS as 32bit vs 64bit on a 64bit OS?在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是什么? 【发布时间】:2010-10-05 04:51:30 【问题描述】:

可能更适合“机架溢出”,但从开发人员的角度来看,将 IIS(服务于传统的经典 ASP 和 .NET)作为 32 位进程而不是 64 位进程在计算机上运行的优点和缺点是什么64位windows主机?

与 32/32 相比,32/64(iis/服务器)的主要优势似乎是每个 IIS 进程的内存容量高达 4gb。

我期望 32/64 相对于 64/64 的优势似乎是更容易访问旧的 32 位进程内 DLL(我们仍然从合作伙伴供应商那里获得一个,我们无法立即放弃) 并且给定更小的内存指针,相同代码的内存占用可能更小。

与 32/64 相比,64/64 是否有任何性能优势或其他任何可以保证现在完全转换的东西?我在这里做了什么错误的假设吗?

【问题讨论】:

相关帖子 - Target 32 Bit or 64 Bit native DLL depending on environment 【参考方案1】:

在 64 位和 32 位上运行 IIS 的唯一性能优势是允许访问更大的内存地址空间。

如果您正在执行正常的 ASPX 页面处理,那么您可能不需要从任何单个进程处理超过 4gb 的数据。假设您在 32 位模式下运行一个网络花园,在同一台机器上有多个工作进程。在这种情况下,每个进程最多可以寻址 4GB。

当您执行缓存时,最大的优势就会出现。 64 位进程可以维护一个巨大的内存缓存(假设您有 32GB 或更多的 RAM 来支持它),以允许您在 Web 服务器上缓存复杂的页面内容或数据。当数据的生成成本高于检索数据的成本时,这可以提高性能 - 例如,如果数据是精细的形式(假设是蒙特卡罗模拟的结果),或者数据驻留在机外并且网络IO 时间比缓存检索时间昂贵得多。

如果您不使用缓存,那么 64 位 IIS 将无法帮助您。每次查找都需要 64 位指针,这会使一切变慢。

64 位服务器在用于数据库(如 SQL Server)或其他数据管理服务器(例如,企业电子邮件服务器,如 Exchange)时比用于处理服务器(如 IIS 或它管理的工作进程)更有效.使用 64 位地址空间,需要管理数据的服务器可以将更多的数据以及索引和其他缓存保存在内存中。这样可以节省磁盘 IO 时间和查询进入时的详细说明时间。大多数 Web 应用程序不需要从单个进程处理超过 4gb 的数据。


也许是一个有用的类比:在交通领域,大型 SUV 就像 64 位机器,而普通的紧凑型乘用车就像 32 位服务器。你可以在一辆大型 SUV 中携带更多的东西,它具有更大的牵引能力,可容纳 8 人,a GVWR of 8600 lbs。但有了这一切,你付出。卡车更重。它使用更多的燃料。如果您只运送 2 个人和一个行李袋,则不需要 SUV。使用较小的车辆会更好。它可以更快、更高效。

【讨论】:

你的类比是有缺陷的。 X64 进程的执行速度将比 64 位上的 thunked 32 位更快。尤其是在较旧的 IA64 处理器上,thunking 有明显的开销。 是的。除了一些内存/指针密集型应用程序之外,大多数应用程序都可以利用 x86_64 phoronix.com/… 中大量寄存器的优势【参考方案2】:

我认为您没有做出任何错误的假设。但我会说,不,您概述的任何场景之间可能没有性能差异。 Windows 上的 64 上的 32 不会受到惩罚。 64 on 64 可能会带来一些轻微的性能提升,但这是值得怀疑的。使用 32 位进程可能会节省一些内存,但这很可能会被运行该进程所需的 thunking 所抵消。

唯一的好处是您提到的 DLL 问题。这也可能是升级的原因(如果您需要使用特定的 64 位)。

【讨论】:

运行 64 位进程时可用的额外寄存器怎么样?这些应该可以提高应用程序的性能。 如果 Windows 不使用额外的寄存器来代表 32 位进程,那么是的,那里可能会有所收获。我对较低级别的东西了解得不够多,无法回答这个问题。 re:64 on 64 可能会稍微提升性能,但这是值得怀疑的。 仅使用 64 位并没有神奇的性能提升。事实上,如果您处于 64 位模式,您需要为每条指令支付税费。每个指针移动都是 64 位宽,每个比较都更宽。这些东西可能比 32 位对应物花费更多的 cpu 周期。仅当您的应用程序需要访问大于 4gb 的内存空间时,64 位才有意义。在其他情况下,成本会更高。 learn.iis.net/page.aspx/201/32-bit-mode-worker-processes 仅供参考,来自blogs.msdn.com/b/cenkiscan/archive/2012/06/20/…【参考方案3】:

我有过从运行 IIS 6 和 ASP.NET 3.5 网站性能的 32 位 Windows 2003 Server 迁移到 64 位 Windows 2003 Server 的经验。

64 位服务器的运行始终比 32 位服务器慢 2 秒。

在将 IIS 6 切换为作为 32 位工作进程运行后,性能再次相同且可比。

我还没有验证它,但我认为它可能只适用于 IIS6 win2k3,因为我用 IIS7 x64 (Vista) 和 64 位 IIS 工作进程完成的测试似乎执行得很好。

切换到 32 位进程的过程非常简单。这是包含支持详细信息的知识库文章: http://support.microsoft.com/kb/894435/en-us

ASP.NET 2.0,32 位版本 要运行 32 位版本的 ASP.NET 2.0,请按以下步骤操作:

    单击“开始”,单击“运行”,键入 cmd,然后单击“确定”。 键入以下命令以启用 32 位模式: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 键入以下命令以安装 ASP.NET 2.0(32 位)版本并在 IIS 根目录下安装脚本映射: %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 确保在 Internet 信息服务管理器的 Web 服务扩展列表中将 ASP.NET 版本 2.0.50727(32 位)的状态设置为允许。

有关设置回 64 位的信息,请参阅知识库文章。

【讨论】:

【参考方案4】:

有关内存可用性,请参阅此msdn blog。

内存可用性。对于我的应用程序,我们得到了从 32 位操作系统上的 32 位进程切换到 64 位操作系统上的 32 位进程所需的功能,而无需更换第三方库。所以,我们停在那里。好处是:1) 每个 IIS 工作进程可用的有效内存为 2-3 倍;2) 在网站使用大量内存的 32 位操作系统中,其他系统进程和网站竞争有限的总内存。对于您的应用程序,请查看您的工作进程使用了​​多少内存。如果每个 WP 不使用大量内存(远超过 1GB),64 位工作进程将无济于事。

为了性能,我认为您必须在两种配置中测试自己的应用程序。上面的Dave's post 表示您可能会在使用 64 位时出现性能下降。 As cheeso notes,一些应用程序可能会从缓存中受益(不过,2GB 以上的缓存已经很多了)。除了有限和简单的应用程序之外,我认为我们无法对性能进行概括。我们或许能够指出性能更好或更差的特定技术。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

TestComplete 64位和32位之间的区别

office32位和64位的区别,用户如何选择

32位软件和64位软件有区别吗?

当同时安装 32 位和 64 位 JVM 时,如何使用 32 位 JVM 强制运行 Jar 文件?

使用ROS 32位和64位并行

32位和64位有啥区别 32位和64位区别都有哪些