Windows Server 2003 性能调整指南
Microsoft 公司
发布日期:2003 年 12 月
摘要
本文介绍了有助于提高Microsoft® Windows Server™ 2003
系统性能表现的重要参数和设置。文章对每一种设置及其可能具有的效果进行了描述,帮助用户根据自己的系统、工作负载和性能目标做出明智的决策。
本文档所包含的信息代表了在发布之日,Microsoft Corporation
对所讨论问题的当前看法。因为 Microsoft
必须顺应不断变化的市场条件,故该文档不应理解为 Microsoft
一方的承诺,Microsoft
不保证所给信息在发布之日以后的准确性。
本文档仅供参考。对本文档中的信息,MICROSOFT
不做任何明示、默示或法定的保证。
遵守所有适用的版权法律是用户的责任。在不对版权法所规定的权利加以限制的情况下,如未得到
Microsoft Corporation明确的书面许可,不得为任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。
Microsoft
可能拥有本文档主题涉及到的专利、专利申请、商标、版权或其他知识产权。除非在
Microsoft
的任何书面许可协议中明确表述,否则获得本文档不代表您将同时获得这些专利、商标、版权或其它知识产权的许可证。
© 2003 Microsoft Corporation. 保留所有权利。
Microsoft、Active Directory、Windows 和 Windows Server 是 Microsoft
Corporation 在美国和/或其它国家或地区的注册商标或商标。
此处提到的实际公司和产品名称可能是其各自所有者的商标。
目 录
选择网络适配器
· WHQL 认证
· 卸载能力
· 中断调解
· 64位功能
· 铜缆和光纤网络适配器
· 双端口或4端口的网络适配器
调整网络适配器
· 启用卸载特性
· 网络适配器资源
· 中断调解
TCP 参数
选择存储系统
· WHQL 认证
· 减少待存储数据的数量
· 存储阵列的选择
· HW RAID 的级别
· 选择RAID 级别
· 确定卷的布局
· 中断调解
与存储有关的参数
· CountOperations
· NumberOfRequests
· DontVerifyRandomDrivers
选择正确的高性能硬件
操作系统最佳实践
IIS 6.0 优化
内核模式的调整
· 缓存管理设置
· 请求和连接管理设置
用户模式设置
· IIS 注册表设置
· IIS Metabase
· IIS 工作进程选项(IIS Admin UI、应用程序池属性)
· 安全套接字层的调整参数
· ISAPI
· 托管代码调整参数
· 影响IIS性能的其他问题
· NTFS 文件系统设置
· Tcpip.sys 的IIS性能设置
· IIS的网络适配器调整和绑定
一般考虑事项
服务器消息块服务器模型
文件服务器的常规调整参数
· PagedPoolSize
· NtfsDisable8dot3NameCreation
· Disablelastaccess
· NumTcbTablePartitions
· TcpAckFrequency
中断关联
客户端计算机的常规调整参数
· DormantFileLimit
· ScavengerTimeLimit
· DisableByteRangeLockingOnReadOnlyFiles
· TcpAckFrequency
对 Boot.ini 文件使用 /3GB 开关参数
关闭签名和密封功能
· Windows Server 2003面向 NetBench
的注册表调整参数
· 客户端计算机上面向 NetBench
的注册表调整参数
· 添加针对描述属性的索引(服务器)
· 关闭磁盘碎片自动整理程序
· 在 TCP/IP 增加 MaxUserPorts 和 TcpWindowSize
针对 NTttcp 的调整
· 网络适配器
· TCP
针对Chariot 的调整
介绍
对于用户现有的大多数工作,Microsoft® Windows
Server™ 2003
应该都能够运行自如。但是,我们还可以调整服务器设置并获得更好的性能表现,尤其是在工作负载的性质不会随同时间推移而不断变化的时候。
大多数的有效调整都应该考虑到硬件、工作负载以及性能目标这些因素。本文介绍了有助于提高性能的重要调整参数和设置。并且介绍了每一种设置以及它的潜在功效,帮助用户根据自己的系统、工作负载和性能目标做出明智的决策。
说明:Microsoft Windows® 2000 Server 和
Windows Server 2003的注册表设置和调整参数可能存在较大差异。在调校服务器时请务必牢记:使用早期或过时的调整指南可能会得到意料之外的结果。
此外,在直接操作注册表时请总是谨慎行事。如果必须编辑注册表,请首先进行备份。
网络的性能调整
网络体系结构包括许多组件、接口和协议;图1描述了其中的部分内容。本节以下部分将针对服务器负载,对部分组件的优化调整加以讨论。
图 1 网络栈的组件
网络体系结构由多个层组成,这些层可以被大致划分为:
· 网络驱动程序和NDIS。这些是处于最底部的层。NDIS将它下方的驱动程序接口暴露它上方的层;例如:TCP/IP。
· 协议栈。此层实现了诸如TCP/IP 和 UDP/IP
这样的协议。这些层向位于它们上方的层暴露了TDI接口。
· 系统驱动程序。属于典型的TDI客户端,用来向用户模式的应用程序暴露接口。WinSock接口由Afd.sys加以暴露。
· 用户模式的应用程序。
耗费大量网络资源的工组负载的调整工作涉及所有层的调整。下面介绍了其中的部分工作。
选择网络适配器
网络密集型的应用程序需要高性能的网络适配器。本节内容介绍了选择网络适配器时的一些注意事项。
WHQL 认证
选择通过了Microsoft Windows Hardware Quality Labs(WHQL)认证的网络适配器。
卸载能力
卸载有助于降低服务器CPU的使用率,从而提高系统的整体性能。Microsoft
TCP/IP
传输可以让具有相应任务卸载能力的网络适配器卸载以下的一项或多项任务:
· 校验和任务。TCP/IP 传输可以在发送和接收时卸载IP和TCP校验和的计算和验证工作。
· IP 安全性任务。TCP/IP 传输可以卸载身份验证标头(AH)和ESP(封装安全性负载)的已加密校验和的计算和验证工作。TCP/IP传输还可以卸载ESP负载的加密和解密工作。
· 大型TCP 数据包的分段。TCP/IP
传输支持大型发送卸载(LSO)。利用LSO,TCP/IP传输可以卸载大型TCP数据包的分段工作。
· 堆栈卸载。整个网络堆栈可以被卸载到具有相应能力的网络适配器上。
中断调解
某些网络适配器可以降低向处理器发出中断的频率,这些中断表明适配器上启动(或完成)了某个网络操作。某些网络适配器还能够将网络和主机处理器的负
载考虑在内,以一种自适应的方式做出上述决定。减缓中断的发生频率通常可以降低主机CPU的负载,但是除非能够以一种智能和自适应的方式执行中断调解,否
则在CPU方面的性能节省将以网络延迟的增加作为代价。
64位功能
具有64位能力的网络适配器可以对大容量物理内存地址(4GB以上)执行直接内存访问(DMA)操作。
铜缆和光纤网络适配器
使用铜缆的网络适配器和使用光纤的适配器具有同样的性能,但是在价格上要便宜一些。铜缆网络适配器上的收发器的价格也要更低一些。
双端口或4端口的网络适配器
这些网络适配器对于故障转移应用来说非常适宜,但是网络适配器上的所有端口都共享同一个中断。通常,对于同样的工作负载,使用两块单端口的网络适配器要比使用一块双端口的网络适配器具有更好的性能。
调整网络适配器
如果网络适配器允许,可以通过调整网络适配器来优化网络吞吐量和资源使用率。需要记住的是:具体的调整工作需要视网络适配器、工作负载、主机资源以及性能目标而定。
启用卸载特性
开启网络适配器的卸载特性一般总是有益的。但是,在某些情况下,网络适配器的处理能力可能不足以完成高吞吐量情况下的卸载工作。比如,启用LSO会
降低某些网络适配器最大能承受的吞吐量。但是,即使是这样的网络适配器,如果对吞吐量方面的降低并不在意,也应该启用卸载特性。请注意:某些网络适配器需
要为发送和接收路径单独启用卸载特性。
网络适配器资源
有几种网络适配器允许管理员配置资源。可以为接收缓冲区和发送缓冲区设置参数。部分网络适配器会主动管理它们的资源,而无需为这些网络适配器设置这些参数。
中断调解
某些网络适配器会保留 buffer coalescing
(缓冲区合并)参数(发送和接收缓冲区有时单独进行配置)。在网络适配器不能够以自适应方式执行中断调解时,考虑缓冲区合并十分重要。
TCP 参数
高吞吐量情境下可以考虑进行调整的TCP 参数如表1所示。
表 1. TCP 参数
参数
|
描述
|
TCPWindowSize
|
该值决定了在任何一个给定的时间,能够在网络上传送的最大数据量(以字节计)。可以使用如下注册表条目,将其设置为从1到65,535
字节的任何值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\TcpWindowSize (REG_DWORD)
对于gigabit接口,此参数的默认值被设置为65,535左右(向下舍入为最接近的完整TCP数据包的倍数),100Mbps的连接设置为
16,384,其他速度更低的接口(例如调制解调器)则设置为8,192
——
同样需要向下舍入。理想情况下,该值应该被设置为端到端网络带宽(以字节为单位)与往返延迟(以秒为单位)的乘积,也就是带宽与延迟的乘积。该值应该根据计算机预计接收到的TCP数据量进行设置。
|
Window Scaling
|
在带宽与延迟的乘积值很高的连接上(例如,卫星连接),可能需要将窗口的大小增加到64K以上。为了提高窗口大小,需要按照RFC1323中的规定,设置如下注册表条目,以启用TCP选项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip\Parameters\Tcp1323Opts (REG_DWORD)
为了使用大于65,535的窗口尺寸,该注册表条目应该被设置为1。在修改了该值之后,便可以将用来控制TCPWindowSize的注册表条目设置为大于64K的值(最大1GB)。
|
MaxHashTableSize
|
该值决定了保存TCP连接状态的散列表的大小。默认值为128乘以系统中处理器数量的平方。如果预计系统需要处理大量的并发连接,可以将如下注册表条目设置为一个较高的数值,以提高散列表的性能:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\MaxHashTableSize (REG_DWORD)
最大值为 0x10000(65,536)。我们建议您在将要处理大量连接负载的大型服务器上将此值设置为最大值。需要记住的是:该表使用了不分页的池,所以,如果服务器没有许多不分页池可用,或者服务器不需要处理大量连接负载,那么请不要将本参数设置为一个太高的数值。
|
NumTcbTablePartitions
|
默
认情况下,存放TCP连接状态的表拥有的分区数量等于处理器数目的平方。在大多数情况下,该设置是恰当的,而且会减少表的争用现象。但是,对于处理器数目
大于16的服务器,默认值显得过于高了,并可能会因此占用太多的CPU资源。在这种情况下,请将以下注册表条目设置为一个小于处理器数目平方的数值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip\Parameters\
NumTcbTablePartitions (REG_DWORD)
|
MaxUserPort
|
当计算机上存在一个活动连接的时候,就会使用到端口。在给定了可用的用户模式端口(每个IP地址有5000个)的默认值和TCP超时等待要求之后,可能必须在系统中提供更多的端口以供使用。可以将如下注册表条目的值最大设置为
0xfffe(65534):
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\MaxUserPort
|
存储系统的性能调整
存储体系结构的驱动程序堆栈包含许多组件,如图2所示。本节将讨论存储负载的调整方法。
图 2 存储驱动程序堆栈
选择存储系统
在选择存储系统时,最重要的考虑事项是:
·
为当前和未来的存储需要提供必要的存储空间、带宽和延迟特性。
· 选择HW RAID
类型的系统和备份过程,以便获得良好的性能表现和数据恢复能力。
WHQL 认证
选择通过了WHQL认证的存储适配器。
减少待存储数据的数量
如果希望减少在新的文件服务器上保存的数据数量,需要考虑以下问题:
·
当前在文件服务器上保存的数据量,这些文件服务器将要被合并到新的服务器中。
·
如果文件服务器将成为一个复制成员,存储在新的文件服务器上的数据中将有多少会参加复制。
· 未来需要在文件服务器上保存的数据量。
一般的指导原则是:针对超过目前增长速度的更快的未来增长进行规划。调查组织是否打算雇佣大量人员,或者组织中的各个部门是否计划实施一些需要超大存储容量的项目等等。
此外,还必须将操作系统文件、应用程序、RAID冗余、日志文件以及其他因素考虑在内。表2描述了影响文件服务器容量的部分因素。
表 2. 影响文件服务器性能的因素
因素
|
需要的存储容量
|
操作系统文件
|
至少1.5 GB。为了为可选组件、未来安装的服务包以及其他项目预留足够的空间,还应该为操作系统卷再额外规划3 GB到5 GB的空间。
|
分页文件
|
情况下,其大小默认为内存容量的1.5 倍。
|
内存转储
|
根据选择的内存转储文件选项,需要的磁盘空间可能等于物理内存的数量再加上1MB。
|
应用程序
|
根据应用程序的具体情况而有所变化,包括防病毒、备份、磁盘配额软件、数据库应用以及可选组件(例如,恢复控制台、Services
for Unix和Services for NetWare)等。
|
日志文件
|
根据创建日志文件的应用程序而有所变化。某些应用程序允许用户设置日志文件的最大尺寸。必须确保有足够的剩余空间来容纳日志文件。
|
RAID 解决方案
|
视具体情况而有所变化;请参阅后文中的 选择RAID
级别 了解更多信息。
|
影子副本
|
默认情况下,使用10%的卷空间,但是我们建议用户为其使用更多空间。
|
存储阵列的选择
在选择存储阵列和适配器的时候需要考虑许多事项。在选择存储阵列类型的时候,可以考虑以下选项:
表3. 选择存储阵列时的选项
选项
|
描述
|
光纤通道或SCSI
|
·
光纤通道允许用户使用长的玻璃或铜制电缆将存储阵列连接到系统,从而提供高带宽。
· SCSI
提供了非常高的带宽,但是电缆长度有限。
|
HW RAID 能力
|
存储控制器具有 HW RAID 能力十分重要。表4介绍了RAID
0、RAID 1和RAID 5级别。
|
最大存储容量
|
· 总的存储区域。
·
访问存储系统时的带宽由阵列中的物理磁盘数量、控制器的速度以及磁盘类型(例如,SCSI或光纤通道)、HW
RAID、以及将存储阵列连接到系统的适配器共同决定。
|
HW RAID 的级别
大多数存储阵列都具有部分的HW RAID功能,并包括如下RAID选项。
表4. HW RAID 选项
选项
|
描述
|
RAID 0
|
RAID 0
表现为一个逻辑磁盘,由一组物理磁盘组成,并以带区方式访问磁盘。
· 整体来看,这种方式是速度最快的HW RAID配置方式。
· 这是一种最为廉价的RAID配置方式,因为无需复制数据。
· 和RAID 0 和 RAID 5 不同,RAID 0
不提供额外的数据恢复机制。
|
RAID 1
|
RAID 1
表现为一个逻辑磁盘,它与另一个磁盘互为镜像。
· RAID 1的写操作的速度慢于RAID 0,因为需要向两块或两块以上的物理磁盘写入数据,而且它的写操作具有最长的延迟时间。
· 在某些情况下,RAID 1读取数据的速度要快于RAID
0,因为它可以从最闲的一块物理磁盘中读取数据。
· 从物理磁盘方面来看,RAID 1是最为昂贵的配置方式,因为数据被完整地保存成两份或者更多的副本。
·
在物理磁盘发生故障之后所需的恢复时间方面,RAID 1的速度最快,因为第二块物理磁盘可以立即投入使用。可以在安装新的镜像磁盘的同时,允许用户访问所有数据。
|
RAID 5
|
RAID 5
表现为一个逻辑磁盘,它将奇偶校验信息写入到另一块磁盘中,如图3所示。
· RAID 5
使用独立的数据磁盘,并且具有分布式的奇偶校验块。
· RAID 5 的速度慢于RAID 0,因为每一个逻辑磁盘的写I/O都会将数据被写入到多块磁盘。但是,RAID
5提供了RAID 0
所没有的数据恢复功能,因为可以根据奇偶校验来重新构造数据。
· 在物理磁盘发生故障之后,RAID 5
需要花费额外的时间(和RAID 1相比)进行恢复,因为它需要利用保存在其他磁盘上的奇偶校验信息来重新构造磁盘上的数据。
· 因为不需要在磁盘上保存数据的完整副本,RAID
5的成本低于RAID 1。
|
其他
|
其他的RAID组合方式包括RAID 0+1、Raid 10 以及 Raid 50。
|
下图描绘了RAID 5 的配置方式。
图 3 RAID5 概述
选择RAID
级别
选择每一个RAID 级别时都需要全面考虑如下因素:
· 成本
· 性能
· 可用性和可靠性
您可以评估各种数据类型的读写负载,然后确定为了实现组织的性能表现和可用性(可靠性)目标所需耗费的资金,最后为文件服务器选择最佳的RAID级别。表5介绍了4种常见的RAID级别、它们的相对成本、性能表现、可用性和可靠性以及建议使用的场合。
表5. RAID 考虑因素
|
RAID-0
带区
|
RAID-1
镜像
|
RAID-5
带奇偶校验的带区
|
RAID-0+1
带区镜像
|
最小磁盘数量
|
2
|
2
|
3
|
4
|
可用的存储容量
|
100%
|
50%
|
N-1/N
此处的 N 为磁盘的数目
|
50%
|
容错性
|
无。其中一块磁盘的故障会丢失卷中的所有数据。
|
可以允许损失多块磁盘,只要有一对镜像磁盘没有损失即可。
|
可以容忍其中一块磁盘发生故障。
|
可以允许损失多块磁盘,只要还有一对镜像磁盘没有损失即可。根据阵列中镜像磁盘的对数而有所变化
1。
|
读性能
|
由于改善了并发性,一般会得到提高
|
良好的读性能
|
由于改善了并发性,一般会得到提高
|
由于改善了并发性,并且每个请求可以有两个来源,从而提高了性能。
|
写性能
|
由于改善了并发性,一般会得到提高
|
比JBOD 差(对于大多数负载,在20% 和 40% 之间)
|
很差,除非执行完整的带区写入操作(大型请求),比JBOD低大约25%左右(4:1
请求)。
|
可能提高,也可能降低,具体情况视请求的大小、热点(静态或动态)等因素而定。
|
最佳用途
|
只用于存储临时数据
|
操作系统日志文件
|
· 操作系统
· 用户和共享数据
· 应用程序文件
|
· 操作系统
· 用户和共享数据
· 应用程序文件
· 日志文件
|
1如果某块磁盘发生故障,在替换磁盘之前如果其镜像伙伴也发生故障,数据将会丢失。但是,任何其他成员磁盘的故障并不会导致数据丢失。
如果您使用了两块以上的磁盘,RAID 0+1永远都是比RAID 1更好的解决方案。
在确定应该在RAID 0、RAID 5和RAID 0+1虚拟磁盘中包括的磁盘数量的时候,应该考虑以下信息:
· 随着添加更多的磁盘而获得的性能提升。
· 可靠性,两块磁盘的平均故障时间(MTTF),将随着在RAID
5或RAID 0中添加磁盘而不断降低。
·
随着添加更多磁盘,可用的存储容量将增加,但是成本也会随之一同上升。
· 带区单元的大小。软件解决方案将其固定在64 KB。硬件解决方案则从4KB到1MB不等。理想的带区单元的大小可以在不中断请求的情况下最大限度改善磁盘操作(因为多块磁盘可以服务于同一个请求)。例如:
· JBOD上的一个顺序请求流(大型)在一个时间只会导致一块磁盘处于繁忙状态。为了让所有磁盘都处于繁忙状态,带区单元需要被设为1/N(此处的
N 等于请求的大小)。
·
对于N个小型的随机请求流,如果N大于磁盘的数目,而且没有热点,那么带区集将不会提高系统的性能。但是,如果存在热点,带区单元的大小就需要精心设置,
以便将请求被分割的现象降至最少,同时最大限度地避免热点完全落入一个或两个带区单元。您可能会将单元的大小设置为请求大小的低倍数,例如5倍或10倍,
尤其是当请求大小位于某个容量界限时(例如,4KB或者8KB)。
·
当流的数量少于磁盘的数量时,需要对流进行分割,以便所有磁盘都保持繁忙状态。根据上面的两个例子,例如,如果您有10块磁盘和5个流,那么需要对半分割每个请求(将带区单元的大小设置为请求大小的一半)。
确定卷的布局
任何时候,都应该尽可能地将不同类型的数据分别放在不同的卷上。例如,为操作系统和分页文件使用一个卷,为共享的用户数据、应用程序和日志文件使用一个或多个卷
将不同类型的数据放在不同虚拟磁盘的不同卷中。使用不同的虚拟磁盘对于那些会产生大量数据写入负载的数据类型(例如日志文件)来说显得尤其重要,因
为单个磁盘集(包含虚拟磁盘)可以专门用来处理由于日志文件的更新而产生的磁盘I/O。将分页文件放在单独的虚拟磁盘上可以小幅度地提高系统性能,但是这
种性能提升一般不值得为其付出额外的成本。
为了在最大限度降低成本的同时提高性能,将位于同一个虚拟磁盘上的一个或多个卷中的不同数据类型合并到一起通常是一种有益的做法。一个常见的方法就是:将操作系统和分页文件放在同一个虚拟磁盘上,而将用户数据、应用程序以及日志文件放在剩余虚拟磁盘的一个或多个卷上。
中断调解
某些存储适配器能够减慢向主机处理器发出中断的频率,这些中断表明发生(或)完成了某个磁盘操作。减缓中断频率通常会降低CPU的负载,但是,除非中断调解能够以智能化的方式执行;否则CPU性能的提高将以延迟时间的增加作为代价。
表6. 中断调解选项
设备
|
描述
|
64位功能
|
支持64位的适配器可以在大容量内存地址(大于4GB)上执行DMA操作。
|
铜缆和光纤(玻璃)适配器
|
使用铜缆的适配器和使用光纤的类似产品一般具有相同的性能表现,而且铜缆和光纤都可以用在某些光纤通道适配器上。使用铜缆和光纤的适配器应该说各有所长,分别有各自适用的环境。
|
双端口或4端口SCSI适配器
|
某些SCSI适配器在一块适配器卡上提供了2或4条SCSI总线。由于SCSI限制了能够连接到SCSI总线上的磁盘数量,这种做法通常是十分必要的。光纤通道的磁盘一般对连接到适配器的磁盘数量没有进行限制。
|
与存储有关的参数
您可以调整如下注册表参数,获得更高的吞吐量。
CountOperations
本参数允许您关闭系统和进程级别的I/O计数器。该计数器会影响磁盘和网络I/O请求的系统和磁盘计数。除了网络接口、IP和TCP计数器之外,物
理和逻辑磁盘计数器不受本参数的影响。由于对进程和系统级别的I/O进行计数会产生可观的开销,而且系统仍然会分析物理、逻辑、网络接口、IP和TCP级
别的I/O速率,因此在系统上使用此注册表参数关闭进程和系统计数器就非常有用。为了关闭进程和系统I/O计数器,需要在以下注册表条目中创建一个注册表
值——以及I/O系统键(如果不存在)——并且将其值设置为0(REG_DWORD):
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\I/O
System\CountOperations.
为了使本设置生效,需要重新启动计算机。可以将CountOperations设置为1,或者删除CountOperations注册表条目,以重新开启进程和系统计数器。
NumberOfRequests
本参数允许您指定为某块给定适配器创建的SRB的数量。它能够提高性能,并且让Windows向逻辑磁盘发出更多的磁盘请求,这对于拥有并发能力的HW
RAID
适配器来说尤其有用,因为每一个逻辑磁盘都由多块物理磁盘组成。但是,默认设置对于许多高速的HW
RAID磁盘阵列来说通常不是最佳的设置。 可以将NumberOfRequests设置为32到96(十进制)之间的一个数值,改善磁盘阵列的整体性能。可以设置以下注册表条目:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MINIPORT_ADAPTER\Parameters
\DeviceN\NumberOfRequests (REG_DWORD)
用具体的适配器名称替换miniport_adapter。为每个设备建立一个条目,并且在每个条目中用Device1、Device2…替换
DeviceN
,具体情况视添加的设备数量而定。为了让设置生效,需要重新启动计算机。例如,如果两块Emulex
LP9000 微型端口适配器的微型端口驱动程序名称为lp6nds35,可以创建如下注册表条目,并将它的值设置为96:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\lp6nds35\Parameters\Device0\NumberOfRequests
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\lp6nds35\Parameters\Device1\NumberOfRequests
DontVerifyRandomDrivers
本参数会阻止驱动程序验证程序处于调试的目的随机校验驱动程序。为了禁用驱动程序校验程序,可以将以下注册表条目的值设为1(REG_DWORD):
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\Memory
Management\DontVerifyRandomDrivers.
IIS 6.0
性能调整
选择正确的高性能硬件
选择能够满足预期Web负载(包括平均负载、峰值负载、容量、成长规划以及响应时间)的正确硬件十分重要。硬件瓶颈会让软件调整带来的性能提升大打折扣。在选择硬件时,请考虑表7所列出的各个因素:
表7. 为IIS 6.0选择硬件时的考虑事项
因素
|
考虑事项
|
处理器的数目、类型和速度
|
· 脚本(ASP或 ASP.NET)以及加密(SSL)都是十分耗用CPU资源的工作。此外,并发的客户端负载也会加重CPU的负担。在为系统选择处理器的速度和数量时,应该考虑到这些因素。
· 大容量的 L2
处理器缓存能够提供更出色的性能。
· 两颗CPU的综合性能通常无法与单颗具有双倍速度(相对于上述两颗速度较慢的
CPU 而言)的 CPU 相媲美。
|
物理内存(RAM)的数量
|
在添加更多的站点、内容脚本(特别是ASP.NET脚本)和应用程序池(或者工作进程)时,添加内存有助于提升系统的性能。
|
网络适配器的数目、类型和速度
|
网络适配器不应该成为瓶颈。型号较新的网卡可以卸载某些服务器功能,从而提升性能。更多细节信息,请参阅前文中的网络性能调整。
|
磁盘控制器的类型,物理磁盘的数量和容量
|
· IIS
能够将经常访问的文件缓存在内存中。但是,不经常访问的文件(“冷门”文件)必须在需要时从磁盘上读取,需要经常访问“冷门”文件的大型站点需要拥有良好的磁盘性能(连接到大量磁盘的RAID控制器)。
· IIS
日志文件的大小以及预计的增长情况都应该纳入考虑范围之内。
|
IIS可能依靠的其他服务器
|
· 速度缓慢的SQL Server 可能会制约连接到其上的IIS服务器的响应率,即使IIS
服务器拥有优秀的硬件组件。
· 如果将IIS服务器和SQL Server(或者任何其他CPU密集型组件)放在同一台服务器上,会限制每个组件能够使用的资源,并且影响系统的整体性能。
|
操作系统最佳实践
·
如果可能,以全新方式安装操作系统。升级可能会留下过期、不想要或者不是最优的注册表设置,以及先前安装的服务和应用程序,如果这些服务和应用程序会自动
启动,那么将占用宝贵的资源。如果安装了另一个操作系统并且需要保留该系统,那么应该在不同的分区安装新的操作系统,否则新安装的系统将覆盖
Program Files\Common Files下的设置。
·
为了降低磁盘访问冲突,应该将系统分页文件、操作系统、Web数据、ASP模板缓存以及IIS日志尽可能放在不同的物理磁盘上。
· 避免安装不必要的服务和应用程序。
IIS 6.0 优化
IIS 6.0 应用了新的进程模型。内核模式的HTTP侦听程序(Http.sys)接收并发送HTTP请求(甚至可以使用它的响应缓存来满足请求)。工作进程注册URL子空间,Http.sys将请求发送到相应的进程(如果使用应用程序池,则发送到进程集合)。
图 4 展示了IIS 5.0和IIS 6.0进程模型之间的差异。IIS 5.0使用WinSock在端口80接受连接。请求由
inetinfo
进程负责接收,然后或者在进程内执行请求,或者将它交给dllhost
进程在进程外进行处理(为了达到隔离的目的)。响应则由 inetinfo
进程发送回去。
图 4 IIS 5.0 和 IIS 6.0
的进程模型
IIS 6.0
进程依赖于内核模式的Web驱动程序Http.sys。在新的模型中,Http.sys负责管理连接和处理请求。请求可能通过Http.sys缓存得到满
足,也可能被交给一个工作进程以便得到进一步处理(见图5)。可以配置多个工作进程,从而以较低开销实现了隔离。
Http.sys包括了一个响应缓存。当请求与响应缓存中的某个条目相匹配的时候,Http.sys直接从内核模式中发送缓存响应。图5展示了请求通过Http.sys得到处理的情况(请求也可能向上交给某个工作进程进行处理)。
图 5 IIS
6.0中的请求处理
由于Web服务器既包括内核模式的组件,也包括用户模式的组件,必须对二者同时进行调整才能获得最佳性能。因此,针对特定负载的IIS
6.0调整工作需要对如下内容进行配置:
· Http.sys(内核模式驱动程序)以及相关的内核模式缓存。
· 工作进程和用户模式IIS,包括应用程序池配置。
此外,我们还将在后文中讨论会对性能造成影响的其他参数。
内核模式的调整
与性能有关的Http.sys设置可以划分为两类:缓存管理以及连接和请求管理。所有的注册表设置都保存在以下条目中:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters
如果HTTP服务正在运行,必须首先停止服务,然后重新启动计算机,以便让设置生效。
缓存管理设置
Http.sys具有的优点之一便是内核模式缓存。如果响应位于内核缓存中,那么可能可以完全通过内核模式来满足某个HTTP请求,这显然可以极大降低CPU处理请求的开销。但是,IIS
6.0的内核模式缓存是一种基于物理内存的缓存,每个条目都需要占用一定的内存空间。
缓存中的条目只有在被使用的时候才能提供益处。但是,条目在任何时候都会占用物理内存,不论它是否被使用。所以,需要对缓存某个项目带来的益处(能
够直接从缓存中满足请求)以及它在整个生命期中的开销(需要占用物理内存)进行评估,并且考虑可用资源(CPU、物理内存)和工作负载的情况。
Http.sys
试图仅在缓存中保存有用(经常被访问)的项目,但是,如果针对特定工作负载来调整Http.sys缓存,Web服务器的性能还可以获得一定程度的提高。
以下是一些有用的Http.sys内核模式缓存设置:
· UriEnableCache.默认值:1。设为非零值可以启用内核模式响应和分段缓存。对于大多数工作负载,缓存都应该保持启用。如果希望获得超低响应和较低的缓存利用率,那么请考虑禁用缓存。
· UriMaxCacheMegabyteCount. 默认值:0。设为非零值可以指定内核缓存可以使用的最大内存数量。默认值为0,允许系统自动调节缓存能够使用的内存数量。注意:只能设置可以使用的最大内存数量,而且系统可能不允许缓存增长到指定的大小。
· UriMaxUriBytes. 默认值:262144 字节(256 KB)。本参数设定了内核缓存中每个条目的最大长度。大于这个长度的响应或分段都不会被缓存。如果有足够的资金,可以考虑增加此参数的值。如果资金有限,而且大型的条目会挤掉较小的条目,那么可以将本参数设为更小的值。
· UriScavengerPeriod. 默认值:120秒。一个“清道夫”程序会定期扫描Http.sys缓存,在两次扫描期
间没有被访问过的条目将被删除。可以将扫描周期设置为一个较高的值,以减少扫描次数。但是,如果访问频率低的老条目仍然保留在缓存中,缓存占用的内存将不
断增加。如果将此期限设置得过低,扫描频率会过于频繁,而且可能导致缓存的过度清洗和扰动。
请求和连接管理设置
此外,Http.sys管理入站HTTP/HTTPS
连接,并且是在这些连接上处理请求的第一个层。它使用内部数据结构保存有关连接和请求的信息。虽然这样的数据结构可以按需创建(或释放),但如果在look-aside里表中保存部分数据结构留作备用,则可以实现更高的
CPU 效率。保存这样的储备有助于Http.sys利用更少的CPU资源来处理负载波动。注意:负载波动不一定由外部的负载波动而引起。一些旨在改善批处理或者中断调解的内部优化措施也可能导致负载波动和起伏。
储备有助于减少CPU的使用率和缩短延迟时间,同时能够增加Web服务器的处理能力,但是也会增加内存的使用率。在调整Http.sys的请求和连接管理行为的时候,需要牢记的因素便是:可用的服务器资源,性能目标以及工作负载的特性。您可以使用以下请求和连接管理设置:
· MaxConnections。本设置用来控制Http.sys所允许的并发连接的数量。每一个连接都会耗用非
分页池(一种宝贵和有限的资源)。默认值的设置相当保守,以限制连接占用的非分页池数量。对于配备了充足内存的专用Web服务器,如果预计会产生大量的并
发连接,可以将此值设置得更高一些。此值设置得越大,占用的非分页池就越多,所以要务必小心,应该使用一个与系统配置相适应的正确数值。
· IdleConnectionsHighMark、IdleConnectionsLowMark和IdleListTrimmerPeriod.
这些值用来控制对非并行使用的连接结构的处理:在某个时间必须提供多少可用的连接(用于处理连接负载的波动)、释放列表的上下界限、以及连接结构剪切和补充的频率等。
· RequestBufferLookasideDepth 和 InternalRequestLookasideDepth 这些值控制与缓冲区管理有关的数据结构的处理工作,以及应该完成多少储备以应付负载波动情况。
用户模式设置
IIS 注册表设置
以下注册表设置可以在下面的条目下找到:
HKLM\System\CurrentControlSet\Services\Inetinfo\Parameters\
· MaxCachedFileSize(REG_DWORD),以字节为单位。决定了能够被缓存的文件大小(默认为256 KB)。实际值根据数据表中最大文件的数量和大小以及可用的RAM数量而定。对频繁访问的大型文件进行缓存可以降低CPU使用率,减少磁盘访问以及相关的延迟时间。
· MemCacheSize(REG_DWORD),以MB为单位。将IIS用户模式缓存限制为指定的大小(默认设置为根据可用内
存的数量由IIS调整缓存的大小)。根据“热门”文件集合(频繁访问文件的集合)的大小以及RAM数量或者IIS进程地址空间(正常情况下应该在2GB以
下),需要认真选择本参数的值。
· DisableMemoryCache(REG_DWORD)。如果设置为1(默认为0),则禁用用户模式的IIS缓存。在缓存命中率非常小的时候,可以完全禁用缓存,以避免与缓存代码路径有关的开销。
· MaxPoolThreads(REG_DWORD)。设置每个处理器能创建的池线程的最大数量(默认为4,范围不限。)每一个池线程都观察网络请求,然后处理它们。MaxPoolThreads
计数没有包括当前处理ISAPI应用程序的线程。如果CPU的平均使用率没有处于最佳状态,应该增加本参数的值,因为现有的所有线程都为繁忙状态,没有用于处理新请求的可用线程。
· PoolThreadLimit(REG_DWORD)。设置系统能创建的池线程的最大数量(默认值为处理器数量的4倍,范围不限)。PoolThreadLimit
必须大于或等于MaxPoolThreads。正常情况下,PoolThreadLimit =
MaxPoolThreads ´
处理器数量。仅仅设置其中的一个参数是不够的。如果同时指定了MaxPoolThreads
和PoolThreadLimit参数,则可以施加更严格的限制。
· ObjectCacheTTL(REG_DWORD),以秒为单位。控制没有被访问过的对象在IIS用户模式缓存中停留的时间长
度(默认值为30秒,如设置为0xFFFFFFFF则禁用对象缓存清道夫线程)。如果系统配备了足够的内存,而且提交的内容不经常变化,那么可以增加本参
数的值。如果系统内存不足而且用户模式缓存的大小在不断增长,则应该降低本参数。请参阅本节下面的 ActivityPeriod 部分。
· ActivityPeriod(REG_DWORD),以秒为单位。只有当文件在活动期限(默认为10秒钟,如果设为0则禁用本
选项)内被重复命中,才允许缓存文件。本参数会降低由于缓存不经常访问的文件而引起的缓存开销,如果缓存内容变化不大,而且没有足够的可用内存,那么可以
增加活动期限的值;或者,如果缓存上存在大量请求负载,可以降低活动期限的值。
· DataSetCacheSize(REG_DWORD)默认值为50。设置配置数据库数据集缓存中虚拟目录条目的最大数量。如果已经安装的虚拟目录的数量超过了默认值,可以增加本参数的值。在提交静态内容的时候,一个容量不足的数据集缓存会增加延迟时间(更低的吞吐量和更低的CPU使用率)。
IIS Metabase
以下设置可以在 W3SVC/ 下找到。
· AspMaxDiskTemplateCacheFiles。启用ASP脚本模板的磁盘缓存。ASP模板的编译是一件非常耗费处理器资源的工作。内存大小限制了可以缓存在内存中的模板的数量。从磁盘上的模板缓存中取回编译后的模板所需的开销比编译ASP内存缓存中没有的模板要小。请参见下文中的
AspScriptEngineCacheMax 一节。
· AspDiskTemplateCacheDirectory。如果可能,可以将其设置为不频繁使用的磁盘(例如,没有和操作系统、分页文件、IIS日志或者其他频繁访问的内容共享的磁盘)。默认目录是
“%windir%\system32\inetsrv\Template Disk cache\ASP Compiled Templates”。
· AspScriptEngineCacheMax。将其设置为内存容量所允许的最大的脚本引擎数(默认为125)。
· AspScriptFileCacheSize。设置为内存容量所允许的最大的ASP模板数量(默认250)。请参阅前文中的AspMaxDiskTemplateCacheFiles一节。
· AspExecuteInMTA。如果在交付某些ASP内容时希望对出现的错误或故障进行检测,请将本参数设置为1(启用)。例
如,如果需要托管多个站点,而且每个站点都运行在它自己的工作进程之下,那么便可以启用本参数。错误一般可以在事件查看器中的COM+部分中看到。本设置
启用了ASP中的多线程单元模型(默认值为0,表示禁用)。
· AspProcessorThreadMax。如果当前设置(默认为25)不足以满足负载的需求(可能会导致某些请求出现错误),可以增加本参数的值。
· CentralBinaryLoggingEnabled。通过将本参数设置为TRUE,可以启用集中的二进制日志记录。二进制IIS日志记录可以减少对CPU的使用,降低占用的磁盘空间以及减少磁盘I/O操作。集中的二进制日志可以被导向一个二进制文件,而无论托管站点的数量如何。分析二进制格式的日志需要一个后处理工具。
IIS 工作进程选项(IIS Admin UI、应用程序池属性)
在没有管理员干预、服务重启或者计算机重启的情况下,IIS管理界面上的IIS工作进程回收选项为发生的紧急故障或事件提供了有效的解决办法。这样
的情况包括内存泄漏,泄漏会增加内存负担,或者导致工作进程进入不响应或空闲状态。在正常情况下,可能不需要启用回收选项,所以可以关闭它(或者对系统进
行配置,以很低的频率执行回收工作)。在下面的章节中,黑体字名称是per-app-pool(应用程序池)变量。在使用脚本设置这些变量的时候,可以使
用路径“ /LM/W3SVC/AppPools/n”,在这里n 代表应用程序池索引。
有三个选项,如下表所示:
· 回收选项。可以在“回收”选项卡中找到。
· 性能选项。 可以在“性能”选项卡中找到。
· 工作进程健康监视选项。可以在“健康”选项卡中找到。
表 8. 回收选项
参数
|
描述
|
PeriodicRestartRequests,DWORD,选项默认为禁用,默认值为35000
|
按照时间定期回收
|
PeriodicRestartRequests,DWORD,选项默认为禁用,默认值为35000
|
根据请求的(累计)数量定期回收
|
PeriodicRestartSchedule, MULTISZ,默认为禁用,默认为空字符串值
|
在指定的时间进行回收
|
· PeriodicRestartMemory, DWORD,默认值为512 MB
· PeriodicRestartPrivateMemory, DWORD,默认值为192 MB
|
如果达到了以下两个条件之一,基于内存的回收(默认为禁用)将允许回收工作进程:
· 虚拟内存的最大容量
· 已使用内存的最大容量
如果面临不断增长的内存容量压力,可以其中一个参数或全部参数,基于严格的内存容量标准,频繁回收工作进程,以缓解内存压力。
|
表 9. 性能选项
参数
|
描述
|
IdleTimeout,DWORD,以分钟为单位,默认值为20
|
在进程的空闲时间超过指定的时间时,关闭工作进程。这样可以节省有限的内存资源,但是如果CPU负载繁重,需要频繁启动新的工作进程,则不建议采取这种做法,因为创建进程会带来一定的开销。
|
AppPoolQueueLength,DWORD,默认值为2000
|
限制每个应用程序池(App-Pool)的内核请求队列的长度。请求会消耗分页池,在对分页池具有大量需求的情况下,应该降低本参数的值。如果超过指定的长度,会导致服务器拒绝请求,并产生编号为503的非自定义错误。
|
CpuAccounting,BOOLEAN,默认为禁用(0),启用为1
|
监
视CPU的使用情况。您可以按照百分比设置CPU的最大使用率(CpuLimit,DWORD,默认值为0)和监视工作的刷新周期
(CpuResetInterval,DWORD,默认值为0,以分钟计)。如果达到了CPU的使用率限制,或者不采取任何操作(但是会在事件日志中写入
一个事件),或者关闭工作进程(CPUAction,DWORD,默认值为0,表示“不采取任何操作”;最大值为1,表示“关闭工作进程”)。
|
MaxProcesses,默认:使用1个工作进程处理所有请求
|
可
以在操作的Web Garden(Web园)模式中控制工作进程的总数量。在Web
Garden模式中,几个工作进程负责处理单个应用程序池下的请求负载。没有通过不同的应用程序池为Web站点预先分配任何工作进程。在某些情况下,一个
工作进程无法满足负载的处理需要(可以通过糟糕的CPU使用率和漫长的响应时间看出这一点),增加工作进程的数量则有助于改善系统的吞吐量和CPU使用
率。在托管了多个站点的情况下,可以考虑采用Web
Garden模式。此外,在其中一个进程突然崩溃的情况下,采用多个工作进程还提供了更多可靠性,而且几乎不会出现所有服务均中断的情况。与预先分配应用
程序池相比,Web Garden模式更容易设置和控制。
|
表10. 健康选项
参数
|
描述
|
PingingEnabled,BOOLEAN, 默认值为1
PingInterval,DWORD,默认值为30秒
|
以固定时间间隔(PingInterval)Ping 工作进程(PingingEnabled)。如果没有响应,则认为工作进程发生错误,IIS将试图终止进程并产生一个新的进程。
|
RapidFailProtection,BOOLEAN,默认
RapidFailProtectionMaxCrashes, DWORD,默认为5个故障
RapidFailProtectionInterval, DWORD,默认为5分钟
|
设
置在给定的时间段内(RapidFailProtectionInterval)允许产生的最大故障数量
(RapidFailProtectionMaxCrashes),对不断快速产生故障的情况加以控制(RapidFailProtection)。如果
到达了指定了故障率,应用程序池将被禁用,并且在事件日志中写入相关信息。
|
StartupTimeLimit,DWORD,默认为90秒
|
控制工作进程的启动时间,超过此时间,则认为其发生了故障。
|
ShutdownTimeLimit,DWORD,默认为90秒
|
控制工作进程的关闭时间,超过了此时间,则认为其处于不响应状态。
|
安全套接字层的调整参数
安全套接字层(Secure Sockets Layer,SSL)的使用会加重CPU的负担。SSL中最为耗费资源的部分为建立会话所需的开销(包括一次完整的握手),然后是重新连接的开销和加密/解密的开销。为了获得更好的SSL性能,请执行如下操作:
· 启用SSL会话的“保持活动”(keep-alive)特性。这样可以消除建立会话所需的开销。
· 如果可能,重新使用会话(特别是对于那些没有“保持活动”的流量)。
· 注意:密钥越长,安全性就越高,但是需要的CPU时间就越多。
·
注意:并不是所有的页面组件都需要加密。但是,混合的纯文本HTTP和HTTPS可能会导致客户端浏览器弹出一个警告,告知并不是所有的页面内容都得到了保护。
ISAPI
对于ISAPI,没有任何具体的调整参数。如果编写一个私有的ISAPI扩展,请确保代码在执行和资源使用方面具有高效率。请参阅后文中的
影响IIS性能的其他问题。
托管代码调整参数
·
确信已经预先编译了所有的脚本。可以在每个目录中调用一个.NET脚本来完成这项工作。在编译完成之后,需要复位IIS。在修改了Machine.config、
Web.config或任何.aspx脚本之后需要重新编译。
·
如果不需要会话状态信息,请确信在每个页面中关闭了此项目。
·
当用户在隔离模式(每个站点一个应用程序池)下运行包含ASP.NET脚本的多个主机的时候,应该监视内存使用情况。请根据预计将要并发运行的应用程序池的数量,为IIS服务器配备足够的内存。考虑在存在多个隔离进程的地方使用多个应用程序域(app-domains)。
影响IIS性能的其他问题
· 安装没有缓存意识的过滤器。安装没有HTTP缓存意识的过滤器会导致IIS禁用全部缓存,从而造成性能急剧下降。老的ISAPI过滤器(在IIS
6.0之前编写的过滤器)可能会存在这个问题。可以使用HTTP缓存的过滤器在配置数据库中被标记为“具有缓存意识”的过滤器。
· CGI 请求。出于性能的考虑,我们不建议使用CGI应用程序处理请求。由于需要频繁创建(和删除)CGI进程,会产生大量的系统开销。更好的替代办法是使用ISAPI程序和ASP(或ASP.NET)脚本。这些方式都可以使用隔离。
NTFS 文件系统设置
HKLM\System\CurrentControlSet\Control\FileSystem\ 下的 NtfsDisableLastAccessUpdate
(REG_DWORD)1。
通过禁止更新最后一次访问的文件或目录的日期和时间戳记,这个针对整个系统的开关参数会降低磁盘I/O负载和缩短延迟。默认情况下本键不存在,因此
需要额外添加。如果操作包含数千个目录的大型数据集(或者大量主机),禁用更新的效果十分明显。如果只需要保留信息Web供Web管理使用,我们建议用户
使用IIS日志代替它。
警告:某些应用程序(例如增量备份工具)需要使用这些更新信息,如果没有这些信息,它们将无法正常工作。
Tcpip.sys 的IIS性能设置
请参阅前文中的 网络性能调整。
IIS的网络适配器调整和绑定
· 确信所有网络适配器设置都为最佳状态。
· 将每一块网络适配器分别绑定到一颗CPU(具体方法取决于网络适配器的数量、CPU的数量以及每块网络适配器上的端口数量)。
请参阅前文中的网络性能调整。
文件服务器性能调整
一般考虑事项
为了满足预期的文件服务器负载,选择正确的硬件十分重要,在选择硬件时需要考虑平均负载、峰值负载、容量、成长规划以及响应时间。硬件瓶颈会使软件调整获得的性能提升大打折扣。
在选择硬件和设置操作系统时,需要考虑以下问题。
表11. 选择正确的硬件以提升性能
问题
|
建议
|
处理器的数量、类型和速度
|
· 大容量的 L2
处理器缓存能够提供更出色的性能。
· 两颗CPU的综合性能无法与单颗具有双倍速度(相对于上述两颗速度较慢的
CPU 而言)的 CPU 相媲美。
|
内存(RAM)的数量
|
如果计算机内存不足,而且需要立即添加更多内存,Windows
Server 2003
使用硬盘空间模拟系统内存。这些内存被称作虚拟内存,也经常被称为分页文件。
·
尽力避免将分页文件与操作系统文件放在同一个驱动器上。
·
避免将分页文件放在容错驱动器上,例如镜像卷或者RAID-5卷。分页文件不需要容错,由于需要将数据写入到多个位置,某些容错系统的写入速度会因此变得非常慢。
·
不要将多个分页文件放在同一个物理硬盘驱动器的不同分区上。
|
网络适配器的数量、类型和速度
|
·
网络适配器不应该成为系统瓶颈。型号较新的网络适配器可以卸载某些服务器功能,从而提高系统性能。
· 确信所有网络适配器设置都是最优的。
· 将每块网络适配器分别绑定到一颗CPU(具体方法取决于网络适配器的数量、CPU的数量以及每块网络适配器上的端口数目)。
· 更多细节信息,请参阅前文中的网络性能调整。
|
磁盘控制器的类型、物理磁盘的数量以及它们的整体容量
|
·
文件服务器将频繁接收访问的文件放入缓存。但是,必须从磁盘上读取访问不频繁的文件。为了处理针对大批文件的大量请求所带来的庞大数据量,磁盘性能必须非常出色(连接大量磁盘的RAID控制器)。
·
将系统分页文件、操作系统以及数据尽可能放在不同的物理磁盘上。
· 确信分配单元大小与卷的大小相匹配。
|
服务器消息块服务器模型
服务器消息块(Server Message Block,SMB)模型包括两个实体:客户端和服务器。
客户端通过重定向程序(Rdbss.sys和SMB 小型重定向程序Mrxsmb.sys)为服务器上所保存的文件接收请求。它通过TCP/IP,使用SMB协议发送请求。
服务器通过TCP/IP协议,从客户端接收多个请求,然后将请求发送到本地文件系统(Ntfs.sys),由它负责访问存储堆栈。
图 6 客户机-服务器通信的SMB模型
文件服务器的常规调整参数
下列注册表调整参数会影响文件服务器的性能。
PagedPoolSize
HKLM\System\CurrentControlSet\Control\SessionManager\MemoryManagement\
(REG_DWORD)
文件缓存空间和分页池空间共享系统虚拟地址中的一个公共区域。限制分页池可以得到更大的系统缓存,从而能够缓存更多的内容,实现更快的文件服务性能。
NtfsDisable8dot3NameCreation
HKLM\System\CurrentControlSet\Control\FileSystem\ (REG_DWORD)
默认值为 0。该参数用于确定 NTFS
是否为长文件名以及包含来自扩展字符集的文件名生成符合
8.3(DOS)命名协定的短文件名。如果该注册表项的值为 0,那么文件潜在可以有两个名称:用户指定的名称和
NTFS 生成的短名称。若用户指定的名称符合 8.3 命名协定,NTFS
则不再生成短名称。
修改该值不会更改文件的内容,但可以避免对文件创建短名称属性,并能更改
NTFS 显示和管理文件的方式。
Disablelastaccess
HKLM\System\CurrentControlSet\Control\FileSystem\. (REG_DWORD)
默认不创建该注册表项。
如果您有一个 NTFS
卷包含大量文件夹或文件,而且有一个程序依次对它们进行访问,那么用于生成Last
Access Time(最后一次访问时间)更新的 I/O 带宽会占用 I/O
总带宽的很大比例。如要提高对文件夹或文件的访问速度,您可以将
disablelastaccess 设置为禁止更新 Last Access Time(最后一次访问时间)。在您使用了该命令并重新启动计算机之后,Last
Access Time 将不再得到更新。如果您创建一个新文件,Last Access
Time 则与 File Creation Time(文件创建时间)保持一致。
NumTcbTablePartitions
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\. (REG_DWORD)
默认创建该键。
该参数控制 TCB 表的分区数量。可以对 TCB
表进行分区,减少对其的争用,从而提高多处理器系统的可伸缩性。
TcpAckFrequency
注意:TcpAckFrequency 只能应用于 Windows Server 2003。
TcpAckFrequency 的推荐设置介于 TcpWindowSize
的值的三分之一和二分之一之间。
对于千兆网卡:
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
对每个千兆网络适配器添加:
TcpAckFrequency (REG_DWORD) = 13(十进制)
注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每
13
个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network
Stack)的数据包处理开销。
对于 FastEthernet 网卡:
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
对每个 FastEthernet 网络适配器添加:
TcpAckFrequency (REG_DWORD) = 5(十进制)
注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每
5
个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network
Stack)的数据包处理开销。
中断关联
中断关联指在多处理器服务器上将中断操作从一个特定设备绑定到特定的处理器上。这将在所指定的处理器上强制运行
ISR 和 DPC
例行程序。由于网络连接和文件服务器话路均位于相同上网络适配器上,因此将中断操作从网络适配器绑定到处理器,可以在一组指定的处理器上处理传入的数据包(SMB
请求、数据),从而提高局部性和可伸缩性。您无法在单处理器计算机上配置中断关联。
中断关联筛选器(Interrupt-Affinity Filter,IntFiltr)工具允许您更改系统中
CPU 的中断关联。
使用该实用程序,您可以将任何设备的中断操作指向一个特定的处理器或一组处理器(避免总是对系统中所有的
CPU
发送中断请求)。注意:不同的设备可以有不同的中断关联设置。该实用程序可应用于任何运行
Windows Server 2003
的服务器,无论采用何种处理器或中断控制器。
客户端计算机的常规调整参数
DormantFileLimit
HKLM\system\CurrentControlSet\Services\lanmanworkstation\parameters\
(REG_DWORD)
默认不创建该注册表键。(仅针对 Windows XP
客户端计算机。)
指定在应用程序关闭文件后可以通过共享打开的最大文件数。
ScavengerTimeLimit
HKLM\system\CurrentControlSet\Services\lanmanworkstation\parameters\
(REG_DWORD)
Windows XP client computers only.
重定向器在开始清除休眠文件句柄(当前无法被任何应用程序所用的已缓存的文件句柄)之前所等待的时间(秒)。
DisableByteRangeLockingOnReadOnlyFiles
HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters\
(REG_DWORD)
仅针对 Windows XP 客户端计算机。
一些分布式应用程序会在对各个客户端进行同步时锁定某个只读文件的部分内容,它们要求关闭所有只读文件的文件句柄缓存和折叠(collapsing)功能。如果不在系统上运行这类应用程序,并且在客户端计算机上启用了折叠功能,那么就可以设定该参数。
TcpAckFrequency
注意:TcpAckFrequency 只能应用于 Windows XP 客户端。TcpAckFrequency的推荐设置介于
TcpWindowSize 的值的三分之一和二分之一之间。
对于Gigabit网卡:
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
对Gigabit适配器添加:
TcpAckFrequency (REG_DWORD) = 13(十进制)
注册表默认不包含该项。
如果仅确认数据而不是针对所有的控制数据包,那么每 13
个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network
Stack)的数据包处理开销。
对于 FastEthernet 网卡:
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
对每个 FastEthernet 适配器添加:
TcpAckFrequency (REG_DWORD) = 5(十进制)
注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每
5
个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network
Stack)的数据包处理开销 。
Active Directory的性能调整
大型 Active Directory®
环境只有少数几个特殊的调整要求。
对 Boot.ini 文件使用 /3GB
开关参数
在服务器计算机上,大容量内存有助于减少磁盘 I/O
活动。使用 /3GB 开关参数,可以为 x86
服务器提供更多用户模式虚拟空间,并且改善Active Directory
的缓存。
Windows 2000 包含两种设置:
· 运用 /3GB 开关参数,主 Active Directory
缓存的最大容量可达1024MB。
· 不运用/3GB开关参数,主 Active Directory
缓存的容量仅被限制为512MB。
对于 Windows Server 2003,Active Directory
缓存可更自由地增长,但是大小受虚拟地址空间的限制。
关闭签名和密封功能
运行附带Service Pack 1(SP1)的 Windows XP
或更高版本的客户端计算机以及运行 Windows Server 2003
的服务器具备签名和密封功能以实现更高的安全性,而且这些功能在默认情况下为启用状态。默认状态下,Windows 2000
客户端并未启用签名和密封功能,但是安装了Service Pack 3(SP3)的
Windows 2000
提供了一个选项来启用该功能。具有安全网络的生产环境不需要启用该设置。Windows
Server 2003
操作系统家族提供了一个用于禁用签名和密封功能的选项。您可以在此找到该设置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ldap\
ldapclientintegrity = REG_DWORD 0x0
针对 Web 工作负载执行基准测试(WebBench)
考虑使用以下原则对 Web 工作负载执行基准测试
· 将 IIS
服务器以及其它相关计算机从企业网络流量中隔离出来。
· 允许通过充足的预热时间获得稳定的状态。
· 同步客户端时钟和 IIS
服务器时钟以确保正确测试基于时间的请求。
· 为了实现最佳性能,在 IIS 的管理用户界面(Admin UI)中,关闭所有回收、性能和电源选项,除非您遇到紧急情况而这些选项能帮上忙。更多信息,新参见本文前面的“IIS 6.0性能调整”一节。
<, p>· 如果使用 SSL,则选择一个合理且一致的键容量。
WebBench 4.1 提供了测量 Web 服务器性能的方法。WebBench
使用客户端计算机模拟 Web
浏览器。但是,不同于真正的浏览器,客户端不显示服务器通过响应其请求所发送的文件。相反,当客户端接收到服务器的响应时,随即记录与该响应相关联的信息,接着马上向服务器发送另一个请求。
下面三个表格列出了高端和低端服务器设置以及客户端计算机调整参数。
表 12. 高端服务器设置
类型 | 设置 |
IIS 设置 | · 注册表(位于:HKLM\System\CurrentControlSet/Services\Inetinfo\Parameters\) · MaxCachedFileSize (REG_DWORD) 1048576 · IIS Metabase(位于:W3SVC/) · 通过设定 CentralBinaryLoggingEnabled = TRUE,启用集中记录的二进制日志文件 · SSL 调整参数:键容量为 1024
字节。如要进行富有挑战性的基准测试,可对所有服务器使用相同的键容量。 |
Http.sys 设置 | · 注册表(位于:HKLM\System\CurrentControlSet/Services\HTTP\Parameters\) UriMaxUriBytes (REG_DWORD) 1048576 (最大的文件)。 |
NTFS 文件系统设置 | · 注册表(位于:HKLM\System\CurrentControlSet\Control\FileSystem\) NtfsDisableLastAccessUpdate (REG_DWORD) 1 |
针对 IIS 的 TCPIP.SYS 性能设置 | · 注册表(位于:HKLM\System\CurrentControlSet\Services\tcpip\parameters\) MaxHashTableSize (REG_DWORD) 0xffff 请参见本文前面的“网络性能调整”一节。 |
针对 IIS 的网络适配器调整与绑定 | · 每个网络适配器均绑定一颗 CPU。 请参见本文前面的“网络性能调整”一节。 |
低端服务器设置的特点如下:
· 单处理器、单网络适配器。
· 有限的物理内存——至少 256 MB;通常为 512 MB 的
RAM。
· 需执行分页操作。
· 对于大批 ASP
文件和严重耗费内存的动态内容,建议不要使用该服务器设置。
表 13. 低端服务器设置
类型 | 设置 |
IIS 设置 | · 注册表(位于:HKLM\System\CurrentControlSet/Services\Inetinfo\Parameters\) MaxCachedFileSize (REG_DWORD) 1048576 MemCacheSize (REG_DWORD) 10 · IIS Metabase(位于:W3SVC/) 通过设定 CentralBinaryLoggingEnabled = TRUE,使用集中保存的二进制日志文件 |
Http.sys 设置 | · 注册表(位于:HKLM\System\CurrentControlSet\Services\http\parameters\) UriMaxUriBytes (REG_DWORD) 1048576 RequestBufferLookasideDepth (REG_DWORD) 256 InternalRequestLookasideDepth (REG_DWORD) 256 LargeMemMegabytes (REG_DWORD) 150 |
NTFS 文件系统设置 | · 注册表(位于:HKLM\System\CurrentControlSet\Control\FileSystem\) NtfsDisableLastAccessUpdate (REG_DWORD) 1 |
表 14. 客户端计算机调整参数
类型 | 设置 |
我的计算机性能设置 | · 针对程序优化处理器调度 · 针对程序优化内存应用 |
针对 IIS 的 TCPIP.SYS 性能设置 | · 注册表(位于:HKLM\System\CurrentControlSet\Services\tcpip\parameters\) MaxUserPort (REG_DWORD) 0xfffe MaxHashTableSize (REG_DWORD) 0xffff TcpWindowSize (REG_DWORD) 65536(在配备 100 BaseT Ethernet
网络适配器的客户端上修改注册表) 请参见本文前面的“网络性能调整”一节。 |
针对文件服务器工作负载执行基准测试(NetBench)
NetBench 7.02 是 eTesting Labs
的基准测试程序,允许您测量文件服务器处理客户端网络文件请求的性能。NetBench 可以为您提供服务器 I/O
吞吐量的总得分、平均响应时间以及各台客户端计算机的单独得分。您可以使用这些测试分数衡量、分析和预测服务器处理客户端请求的能力。在各项测试间通常要
对数据卷进行格式化,以便清空工作区,确保以全新状态开始测试工作。如要提高性能和伸缩性,建议把客户端数据分散在多个数据卷上。
Windows Server 2003面向
NetBench 的注册表调整参数
键 | 设置 |
HKLM\System\CurrentControlSet\Control\SessionManager\
MemoryManagement\ | PagedPoolSize = 192000000(十进制)(默认为0) |
HKLM\System\CurrentControlSet\Control\FileSystem\ | NtfsDisable8dot3NameCreation = 1(默认为0) 添加:Disablelastaccess = 1 默认不创建该注册表键。 |
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\ | 添加:NumTcbTablePartitions = 8 默认不创建该注册表键。 |
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\
Interfaces\ | 对每个Gigabit网络适配器添加:TcpAckFrequency
(REG_DWORD) = 13(十进制) 。 默认不创建该注册表键。对于 FastEthernet
适配器,将该参数为 5。 |
客户端计算机针对
NetBench 的注册表调整参数
键 | 设置 |
HKLM\System\CurrentControlSet\
Services\LanmanWorkStation\
Parameters\ | DisableByteRangeLockingOnReadOnlyFiles = 1;
针对 Windows XP 客户端计算机 |
HKLM\system\CurrentControlSet\
Services\Tcpip\Parameters\
Interfaces\ | 对每个Gigabit网络适配器添加: TcpAckFrequency = 13(十进制)。 默认为不创建该注册表键。对于 FastEthernet
适配器,将该参数设为 5。 |
HKLM\system\CurrentControlSet\
Services\lanmanworkstation\
parameters\ | 添加 DormantFileLimit = 100(十进制)。 默认不创建该注册表键;针对 Windows XP
客户端计算机。 |
HKLM\System\CurrentControlSet
\Services\lanmanworkstation\
parameters\ | ScavengerTimeLimit = 100(十进制);针对 Windows
XP 客户端计算机。 |
针对Active Directory工作负载执行基准测试(DirectoryMark)
下列调整对于执行DirectoryMark
工作负载基准测试很有帮助。最好从一台强大的客户机上执行对大型服务器的
DirectoryMark
测试。这样,操作人员可以启动大量线程,同时还能接收中央数据报告。该设置需要一块Gigabit网络适配器以及性能大致相当的客户机和服务器,同时服务器至少拥有
2 GB 的内存。
添加针对描述属性的索引(服务器)
使用架构编辑器添加一个针对描述属性的索引,后者用于DirectoryMark
Addressing 和 Messaging Search Mixes。
关闭磁盘碎片自动整理程序
在服务器启动 15 分钟后,磁盘碎片自动整理程序(Auto
Defragmenter)随即启动。该程序将运行一个小时,以后每12个小时重新启动一次。基准测试要求测试结果可重复,因此建议关闭磁盘碎片自动整理
程序,以便避免对正在运行的基准测试造成任何可能的干扰。如果已启用磁盘碎片自动整理程序,那么可以在事件日志中查看磁盘碎片整理程序的运行情况。
下方注册表参数用于关闭磁盘碎片自动整理程序:
HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\DSA Heuristics =
REG_SZ 000001
在 TCP/IP 增加
MaxUserPorts 和 TcpWindowSize
频繁使用 LDAP
绑定需要广泛运用动态端口。在服务器和客户端计算机上,需要通过
TCP 保持这些端口开启几分钟,因此需要超出实际用量的可用
MaxUserPorts 端口。
可以调整下列注册表参数:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort =
REG_DWORD 0xfffe
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpWindowSize =
REG_DWORD 0xffff
针对网络工作负载执行基准测试(Ttcp、Chariot)
针对 NTttcp 的调整
NTttcp 是一个面向 Windows 和基于 Winsock 的 ttcp
端口,用于协助测量网络驱动程序在不同网络拓扑结构和硬件设置上的性能和吞吐量。NTttcp
向用户提供一个多线程的异步性能基准测试程序,可用来测量在现有网络设置上可取得的数据传输率。
选项:
· 单一线程应该能够提供最佳吞吐量。
· 仅在出现许多个客户端时,需要多个线程。
· 发布充足的用户接收缓冲区(使用“-a”选项),减少
TCP 复制。
·
不应该发布过多的用户接收缓冲区,因为在您需要使用其它缓冲区前,首批已发布的缓冲区将返回给您。
· 最好是将每组线程绑定给一个处理器(“-m”选项中的第二个分隔参数)。
· 每个线程均创建一个连接(监听)不同端口的套接字。
表 15. 针对 NTttcp 发送器和接收器的示范语法
语法 | 详细说明 |
针对发送器的示范语法 NTttcps –m 1,0,10.1.2.3 –a 2 | · 单线程 · 绑定于CPU 0 · 连接到 IP 地址为 10.1.2.3 的计算机 · 发布两个重叠的发送缓冲区 · 默认的缓冲区容量:64 KB · 默认的缓冲量:20 KB |
针对接收器的示范语法 NTttcpr –m 1,0,10.1.2.3 –a 6 –t 1000 | · 单线程 · 绑定于CPU 0 · 连接到 IP 地址为 10.1.2.3 的计算机 · 发布两个重叠的发送缓冲区 · 默认的缓冲区容量:64 KB · 默认的缓冲量:20 KB |
网络适配器
确认您已启用了所有卸载特性。
TCP
只有带宽-延迟乘积较大时,才可以针对Gigabit Ethernet(64 KB)为
TcpWindowSize 设定高于默认值的数值。
例如,在局域网上使用 Intel MT Gigabit 网卡时,可以针对
NTttcp 保留所有网络适配器和 TCP 设置的默认值。
· Intel MT 网络适配器默认卸载 LSO
及校验和(同时针对接收和发送)。
· Intel MT
网络适配器自行管理其资源,不需要您更改任何网络适配器资源值。
· 未应用Coalesce Buffers(合并缓冲区),但默认的中断调解模式运转良好。
针对Chariot 的调整
Chariot 是 NetIQ
的一个网络工作负载生成器,通过向网络施加负载来帮助用户预测网络应用程序的性能。
Chariot 的 High_Performance_Throughput 脚本工作负载可用来模拟
NTttcp 工作负载。有关该工作负载的调整考虑事项与 NTttcp
相同。
相关链接
请访问下列资源,了解更多信息:
· 事务处理性能委员会网站:www.tpc.org。
· 来自实验室的报告:Windows Server 2003
超越了以前的操作系统:http://www.microsoft.com/windowsserver2003/evaluation/performance/etest.mspx。
· Windows Server 2003网站上的性能与伸缩性资源:http://www.microsoft.com/windowsserver2003/evaluation/performance/default.mspx。
如要了解有关 Windows Server 2003的最新信息,请访问:Windows
Server 2003 网站:http://www.microsoft.com/china/windowsserver2003。