可能更适合“Rack Overflow”,但从开发人员的角度来看,运行IIS(同时提供传统的经典ASP和.NET)作为32位进程而不是64位进程的优点和缺点是什么? 64位Windows主机?
32/64(iis / server)超过32/32的主要优势似乎是每个IIS进程的内存容量高达4GB。我期望32/64超过64/64的优势似乎是更容易访问传统的32位进程内DLL(我们仍然有一个来自合作伙伴供应商的我们无法立即离开并且对于给定较小内存指针的相同代码,可能存在较小的内存占用量。
64/64超过32/64或其他任何可以保证完全切换的性能优势吗?我在这里做过任何错误的假设吗?
答案 0 :(得分:35)
在64位vevrsus 32位上运行IIS的唯一优势是允许访问更大的内存地址空间。
如果您正在进行正常的ASPX页面处理,那么您可能不需要从任何单个进程处理超过4gb的内容。假设您在32位模式下运行,并且在同一台计算机上具有多个工作进程的Web园。在这种情况下,每个进程最多可以处理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。使用较小的车辆你会更好。它可以更快,更有效。
答案 1 :(得分:4)
我认为你没有做出任何错误的假设。但是,我会说,不,您概述的任何情景之间可能没有任何性能差异。 Windows上的32在64上不会被罚款。 64位64可能会略微提升性能,但这是可疑的。使用32位进程可能会节省一些内存,但这可能是因为首先运行该进程所需的thunking所抵消。
唯一的好处是您提到的DLL问题。这也可能是升级的原因(如果您有特别需要使用的64位内容)。
答案 2 :(得分:3)
我有过这样的经历:从32位Windows 2003 Server迁移到运行IIS 6的64位Windows 2003 Server并且ASP.NET 3.5网站的性能是不可接受的。
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,请按照下列步骤操作:
请参阅知识库文章,了解如何设置回64位。
答案 3 :(得分:0)
有关内存可用性的信息,请参阅此msdn blog。
内存可用性。对于我的应用程序,我们得到了我们需要从32位操作系统上的32位进程切换到64位操作系统上的32位进程,而无需更换第三方库。所以,我们停在那里。好处是:1)每个IIS工作进程可用2-3倍有效内存; 2)在网站使用大量内存的32位操作系统中,其他系统进程和网站争夺有限的总内存。对于您的应用程序,请查看您的工作进程使用的内存量。如果每个WP没有使用大量内存(远远超过1GB),64位工作进程将无济于事。
对于性能,我认为您必须在两种配置中测试自己的应用程序。上面的Dave's post表示您的64位性能可能会下降。 As cheeso notes,某些应用程序可能会从缓存中获益(尽管如此,2GB +缓存仍然很多)。除了有限和简单的应用程序,我认为我们不会能够进行性能概括。我们或许可以指出表现更好或更差的特定技术。
答案 4 :(得分:0)
除了显而易见的内存差异外,64位操作系统上的32位进程必须在称为“Windows on Windows”或WOW模式的程序中运行。它基本上是一个thunking / emulation层。如果你足够关注,会有性能损失。