39

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

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

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

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

4

5 回答 5

38

在 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 人,GVWR 为 8600 磅。但有了这一切,你付出。卡车更重。它使用更多的燃料。如果您只运送大约 2 个人和一个行李袋,则不需要 SUV。使用较小的车辆会更好。它可以更快、更高效。

于 2010-01-14T02:02:29.173 回答
4

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

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

于 2009-02-03T17:13:54.453 回答
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,请执行以下步骤:

  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. 确保在 Internet 信息服务管理器的 Web 服务扩展列表中将 ASP.NET 版本 2.0.50727(32 位)的状态设置为允许。

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

于 2009-07-14T05:51:43.877 回答
0

有关内存可用性,请参阅此msdn 博客

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

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

于 2010-01-14T02:44:06.143 回答
0

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

于 2010-01-14T03:10:59.583 回答