性能设置

可以通过调整 Internet 信息服务 (IIS) 配置数据库属性和注册表项来调整 Web 服务器的性能。提高或降低设置值常常可以缓解瓶颈和改善性能,但对配置数据库或注册表的更改也可能会在服务器环境的其他部分产生瓶颈。在对服务器环境进行更改之前或之后都要对性能进行监视,以确定更改是否有益。

本主题将描述适合于 Web 服务器性能的配置数据库注册表设置的建议值。

要点 要点 使用注册表编辑器不当可能导致需要重新安装操作系统的严重问题。因为注册表编辑器会跳过标准安全保护(禁止您输入存在冲突或者有可能降低性能或损坏系统的设置),所以在更改注册表时一定要格外小心。Microsoft 不能保证解决由于错误使用注册表编辑器而出现的问题。有关如何编辑注册表的信息,请参阅注册表编辑器帮助中的更改项和值主题。

对于性能问题,在对注册表进行更改之前,请先尝试更改配置数据库和缓存的设置。要对 Windows 和 IIS 进行配置或自定义,只要有可能,请使用控制面板或 Microsoft 管理控制台 (MMC) 中的程序。

配置数据库的设置

下表列出了对于调整 Web 服务器最重要的配置数据库属性。有关配置数据库属性的默认值的信息,请单击相应的链接。可以通过使用 Windows Management Instrumentation (WMI) 或通过使用文本编辑器直接对配置数据库进行编辑来检索和更改这些属性。对这些属性中大多数属性的更改在重新启动万维网发布服务(WWW 服务)之前不会生效。

配置数据库属性描述
AppAllowDebugging 指定在服务器上是否启用 Active Server Page (ASP) 调试。在启用此属性的情况下,IIS 应用程序线程是序列化的;对于每个应用程序,一次只允许执行一个线程。序列化线程会对 Web 服务器性能产生负面影响。建议您在所有产品服务器上将此属性设置为 false
AspBufferingOn 允许将应用程序的所有输出收集在 ASP 输出缓冲区中,然后再将缓冲的信息刷新到客户端浏览器(默认行为)。如果将此属性设置为 false,那么在客户端浏览器可用时 ASP 脚本的输出将被写入到客户端浏览器。建议您在所有产品服务器上将此属性设置为 true
AspQueueConnectionTestTime 确保 IIS 不将时间浪费在处理用户已放弃的请求上。此设置会显著地改善 Web 应用程序的性能。如果某一请求在队列中的时间长于队列连接测试时间,那么服务器将在开始执行之前检查客户端是否仍处于连接状态。

此功能用于处理急躁的用户用在同一页面上的很多请求尝试填满请求队列的问题。应将该值设置得小一些,例如,三秒钟。是否更改此值要依据服务器运行的 Web 应用程序的类型来决定。长时间运行的 ASP 页面也可以使用 Response.IsClientConnected 方法检查客户端是否仍在等待页面的其余部分。长时间运行的页面应使用 Response.Flush 确保用户觉察到页面仍在连接中并且在进行高效的处理。

AspRequestQueueMax 指定允许进入队列的并发 ASP 请求的最大数量。此设置的效果取决于应用程序的行为。如果请求的执行时间非常短,且在队列中的时间非常短,那么提高默认值的限度是合理的。
AspScriptEngineCacheMax 指定 ASP 页缓存在内存中的脚本引擎的最大数量。根据应用程序中的内容的类型调整默认值。(默认值不包括当前正在运行的脚本引擎)如果有成千上万的不同页,您会体验到提高缓存大小的一些好处:大多数频繁请求的页都可以轻松地访问到。脚本引擎缓存的好处意味着您可以无需将模板重新编译为字节代码。
AspScriptFileCacheSize 指定存储在 ASP 模板缓存中的预编译脚本文件的数量。如果设置为 0,则不缓存任何脚本文件。如果设置为 -1,则缓存所有被请求的脚本文件。如果您有许多不同的 ASP 页,则可以增大默认值。不要将此属性的值设置为 0。如果值为 0,则会关闭所有 ASP 缓存,会严重影响服务器的性能。
AspSessionMaxAspSessionTimeout AspSessionMax:指定 IIS 允许的并发会话的最大数量。

AspSessionTimeout:指定在发出与对象关联的最后一个请求之后会话对象保持的默认时间长短(以分钟为单位)。

对于利用会话的应用程序,缩短会话超时时间以减少服务器所需要的开销可能是明智的做法。然而,如果并发会话的比例很大,则可能有必要使用最大的会话超时值。

AspProcessorThreadMax 指定 IIS 为每个处理器创建的工作线程的最大数量。

IIS 所允许的每个 ASP 进程的工作线程的最大数量是 AspProcessorThreadMax 乘以服务器上处理器的数量。可以降低此值然后监视性能。如果性能降低,请恢复 AspProcessorThreadMax 原来的值。

AspTrackThreadingModel 指定 IIS 是否检查应用程序实例化的所有组件的线程模型。不建议您启用此属性。如果将此配置数据库属性设置为 false,即可避免 ASP 线程模型跟踪所产生的开销,并且您可能会看到 ASP 应用程序的性能改善。然而,如果将此属性设置为 true,您计划给予应用程序作用域的所有组件都必须是灵活的;换句话说,要么被标记为双线程的,并聚集自由线程的封送器,要么被标记为 ThreadingModel=Neutral。

如果应用程序作用域内的组件不是灵活的,那么当您尝试实例化组件时 ASP 就会产生错误。此外,如果此属性为 false,那么缺乏 OnStartPageOnEndPage 方法并在 ASP 应用程序中被实例化的所有对象都比它们在相反的情况下更早地释放。这样就应能够改善应用程序的可扩展性。

CacheISAPI 指出 Internet 服务器 API (ISAPI) 扩展在使用之后是否在内存中缓存。如果此属性的值是 true,那么 DLL 文件在服务器停止之前会保留在缓存中。如果该值是 false,那么在扩展 DLL 不再使用之后将从内存中卸载 ISAPI 扩展。ISAPI 扩展是缓存还是不缓存,取决于在它们加载到内存供使用时此属性的值。因此,如果此属性在扩展被加载并缓存之后被更改,那么更改不会影响该扩展。

将此属性设置为 false 对于调试很有帮助,但建议您在所有产品 Web 服务器上将此值设置为 true。为每个请求重新加载 ISAPI 扩展 DLL 文件会降低性能。ASP.dll 本身就是一个 ISAPI 扩展,因此禁用此属性也会降低 ASP 性能。

注册表设置

此部分列出了在调整 Web 服务器时应考虑的注册表项。每个列出的注册表项都包括驻留相同位置的设置的注册表路径,并包括名称、范围、默认值和每个设置的作用的描述。需要重新启动 IIS 才能使新的 WWW 服务设置生效。

DisableMemoryCache
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:0(已禁用)
范围:0 - 1
DisableMemoryCache 禁用服务器缓存。要确保在所有产品服务器上将此参数设置为 0。如果将此参数设置为 1,那么就会禁用静态文件缓存。尽管禁用缓存可能会对调试有用,但这样做会严重降低产品服务器的性能。此参数无法使用 IIS 管理器进行配置。
MaxCachedFileSize
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:256 KB (262,144 bytes)
MaxCachedFileSize 确定可以放在缓存中的文件的最大大小。IIS 不缓存大于 MaxCachedFileSize 字节的文件。如果您正在运行专用的大型 Web 服务器,您可能需要将此值添加到注册表中,以提高缓存中可以保存的文件大小。
MemCacheSize
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:大约为可用物理内存的一半,以兆字节为单位
范围:0 - 2500MB
MemCacheSize 指定 IIS 用来作为其文件缓存的内存的最大量。如果 IIS 不需要这么多内存,可以留给其他应用程序使用。如果注册表中没有此值,IIS 用作缓存的量不超过 Web 服务器上可用内存的一半(是每隔 60 秒动态地计算出来的)。如果您正在运行专用的大型 Web 服务器,您可能需要将此值添加到注册表中,以提高 IIS 可以使用的内存量。当您将此对象添加到注册表时,必须以兆字节为单位指定此大小。
ObjectCacheTTL
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:30(秒)
范围:0 - 4,294,967,295(无限制)
ObjectCacheTTL 控制静态文件缓存的生存时间 (TTL) 设置,该设置定义对象(包括文件)存放在缓存中的时间长短。如果内存缓存中的对象在所定义的时段内未被引用,则该对象将被清除出缓存。默认情况下,此值未包括在注册表中。如果您希望更改此默认值,则必须手动添加。如果系统内存有限,或者服务器内容是动态的,您可以使用一个较低的 TTL 来防止系统内存被用于缓存大量动态的对象。将值设置为 0xFFFFFFFF 将禁用对象缓存清理程序并允许缓存对象保留在缓存中,直到它们被覆盖为止。如果服务器有足够的系统内存而且数据是相对稳定的,则禁用缓存清理程序将很有用。其他站点可以选择折衷,将此值提高到几分钟。
PoolThreadLimit
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:2 * # MB
范围:0 - 4,294,967,295(无限制)
PoolThreadLimit 指定可以在 Inetinfo.exe 进程中创建的 I/O 工作线程的最大数量,该设置将限制同时连接的数量。IIS 将 PoolThreadLimit 设置为计算机中当前 RAM 的兆字节数量的两倍。如果此值大于 256,则使用 256。如果注册表中已经有该值,那么它就会覆盖 IIS 的计算值。每个池线程都监视网络请求并对其进行处理,处理方法是,发回静态文件或者将该请求传递到 ISAPI 扩展 DLL(如 ASP)或传递到通用网关接口 (CGI)。如果 ISAPI 扩展同步对请求进行处理,它将需要花很长时间来处理请求,而且会占用工作线程,这样 IIS 处理其他请求的工作线程数会变少。因此,高质量编码的 ISAPI 扩展(如 ASP)实现它们自己的线程池,将请求放在队列中,并使用其自己的线程异步对请求进行处理,这样就不会占用 IIS 工作线程了。一般来说,如果您发现默认限度 256 个线程不够,那么 ISAPI 扩展的编码质量可能较差,占用了 IIS 工作线程。

PoolThreadLimit 是包括所有 IIS 工作线程(包括 HTTP、FTP、NNTP 和 SMTP 服务)的硬性限制。PoolThreadLimit 总是大于或等于 MaxPoolThreads

ASP 线程池是单独的一组线程。其大小受 AspProcessorThreadMax 配置数据库设置的控制。未处理的 ASP 请求的最大数量是 AspRequestQueueMaxAspProcessorThreadMax 的总和。

PoolThreadLimit 是包含所有 IIS 线程的硬性限制,它始终大于或等于 MaxPoolThreads

MaxPoolThreads
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:4
范围:0 - 4,294,967,295(无限制)
MaxPoolThreads 指定为每个处理器创建的 I/O 工作线程的数量。每个池线程都监视网络请求并对其进行处理。MaxPoolThreads 计数不包括 ISAPI 应用程序使用的线程;它只表示可用于处理静态文件请求的工作线程数量。IIS 将按需要创建更多线程,以处理 ISAPI 请求。IIS 工作线程的总数不得大于 PoolThreadLimit

默认情况下,只能同时运行四个 CGI 应用程序。如果运行多个 CGI 应用程序,应该增加该值以提高吞吐率。可以将 UsePoolThreadForCGI 的值(在 ..\Services\W3SVC\Parameters 下)设置为 false(或 0),但这有点危险,因为在大量使用 CGI 应用程序时性能会明显降低。通常,每个处理器最好不要创建超过 20 个线程。

ListenBackLog
注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters
数据类型REG_DWORD
默认值:15
范围:1 - 250
ListenBackLog 指定在队列中允许的等待服务器处理的活动连接的最大数量。通常没有必要使用或修改此项,虽然在频繁使用的情况下将此值最多提高到 300 会非常有益。

相关主题


© 1997-2003 Microsoft Corporation。保留所有权利