可以通过调整 Internet 信息服务 (IIS) 配置数据库属性和注册表项来调整 Web 服务器的性能。提高或降低设置值常常可以缓解瓶颈和改善性能,但对配置数据库或注册表的更改也可能会在服务器环境的其他部分产生瓶颈。在对服务器环境进行更改之前或之后都要对性能进行监视,以确定更改是否有益。
本主题将描述适合于 Web 服务器性能的配置数据库和注册表设置的建议值。
要点 使用注册表编辑器不当可能导致需要重新安装操作系统的严重问题。因为注册表编辑器会跳过标准安全保护(禁止您输入存在冲突或者有可能降低性能或损坏系统的设置),所以在更改注册表时一定要格外小心。Microsoft 不能保证解决由于错误使用注册表编辑器而出现的问题。有关如何编辑注册表的信息,请参阅注册表编辑器帮助中的更改项和值主题。
对于性能问题,在对注册表进行更改之前,请先尝试更改配置数据库和缓存的设置。要对 Windows 和 IIS 进行配置或自定义,只要有可能,请使用控制面板或 Microsoft 管理控制台 (MMC) 中的程序。
下表列出了对于调整 Web 服务器最重要的配置数据库属性。有关配置数据库属性的默认值的信息,请单击相应的链接。可以通过使用 Windows Management Instrumentation (WMI) 或通过使用文本编辑器直接对配置数据库进行编辑来检索和更改这些属性。对这些属性中大多数属性的更改在重新启动万维网发布服务(WWW 服务)之前不会生效。
配置数据库属性 | 描述 |
---|---|
指定在服务器上是否启用 Active Server Page (ASP) 调试。在启用此属性的情况下,IIS 应用程序线程是序列化的;对于每个应用程序,一次只允许执行一个线程。序列化线程会对 Web 服务器性能产生负面影响。建议您在所有产品服务器上将此属性设置为 |
|
允许将应用程序的所有输出收集在 ASP 输出缓冲区中,然后再将缓冲的信息刷新到客户端浏览器(默认行为)。如果将此属性设置为 false,那么在客户端浏览器可用时 ASP 脚本的输出将被写入到客户端浏览器。建议您在所有产品服务器上将此属性设置为 |
|
确保 IIS 不将时间浪费在处理用户已放弃的请求上。此设置会显著地改善 Web 应用程序的性能。如果某一请求在队列中的时间长于队列连接测试时间,那么服务器将在开始执行之前检查客户端是否仍处于连接状态。
此功能用于处理急躁的用户用在同一页面上的很多请求尝试填满请求队列的问题。应将该值设置得小一些,例如,三秒钟。是否更改此值要依据服务器运行的 Web 应用程序的类型来决定。长时间运行的 ASP 页面也可以使用 Response. |
|
指定允许进入队列的并发 ASP 请求的最大数量。此设置的效果取决于应用程序的行为。如果请求的执行时间非常短,且在队列中的时间非常短,那么提高默认值的限度是合理的。 | |
指定 ASP 页缓存在内存中的脚本引擎的最大数量。根据应用程序中的内容的类型调整默认值。(默认值不包括当前正在运行的脚本引擎)如果有成千上万的不同页,您会体验到提高缓存大小的一些好处:大多数频繁请求的页都可以轻松地访问到。脚本引擎缓存的好处意味着您可以无需将模板重新编译为字节代码。 | |
指定存储在 ASP 模板缓存中的预编译脚本文件的数量。如果设置为 0,则不缓存任何脚本文件。如果设置为 -1,则缓存所有被请求的脚本文件。如果您有许多不同的 ASP 页,则可以增大默认值。不要将此属性的值设置为 0。如果值为 0,则会关闭所有 ASP 缓存,会严重影响服务器的性能。 | |
|
对于利用会话的应用程序,缩短会话超时时间以减少服务器所需要的开销可能是明智的做法。然而,如果并发会话的比例很大,则可能有必要使用最大的会话超时值。 |
指定 IIS 为每个处理器创建的工作线程的最大数量。
IIS 所允许的每个 ASP 进程的工作线程的最大数量是 |
|
指定 IIS 是否检查应用程序实例化的所有组件的线程模型。不建议您启用此属性。如果将此配置数据库属性设置为 如果应用程序作用域内的组件不是灵活的,那么当您尝试实例化组件时 ASP 就会产生错误。此外,如果此属性为 |
|
指出 Internet 服务器 API (ISAPI) 扩展在使用之后是否在内存中缓存。如果此属性的值是 true,那么 DLL 文件在服务器停止之前会保留在缓存中。如果该值是 将此属性设置为 |
此部分列出了在调整 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 线程池是单独的一组线程。其大小受 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 下)设置为 |
ListenBackLog |
---|
注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\InetInfo\Parameters |
数据类型:REG_DWORD |
默认值:15 |
范围:1 - 250 |
ListenBackLog 指定在队列中允许的等待服务器处理的活动连接的最大数量。通常没有必要使用或修改此项,虽然在频繁使用的情况下将此值最多提高到 300 会非常有益。
--------------------------------------
在 Microsoft Windows Server 2003 中,Http.sys 是处理 HTTP 请求的内核模式驱动程序。根据特定要求,可以配置多个注册表值。“更多信息”部分中的表包含有关这些注册表值的以下信息: • 注册表项名称 更多信息 回到顶端 警告代码 ----------------------- 管理互联网信息服务器(Internet Information Server,IIS)大家都知道,它是一个既简单而又麻烦的东西,简单的是安装它几乎不需要费什么脑筋,选择一下路径,然后一路按“下一步”就可以完成;配置也比较简单,只要有一定的NT和网络知识,照着说明书就可以架设一个像模像样的Web站点出来。然而管理IIS却没有想像的那样简单。使用一段时间以后,管理员往往会遇上服务器性能不良的情况。这时候,IIS的性能优化,就尤为重要了。 导致IIS服务性能不良的原因有两个方面。一个是人为的,也就是说管理员在安装、配置IIS的时候没有进行优化或者配置错误。另一个则是客观上的,随着运行的服务种类,以及访问人数的增加,服务器原有的硬件配置已不能满足要求了,这就需要提高硬件配置。 在服务器配置上优化IIS性能 1.IIS高速缓存是对IIS进行优化时要考虑的最重要的项目之一。服务器保留了一部分内存空间用作IIS高速缓存,为将来的请求存储对象,这样IIS就可从高速缓存中检索对象而不用从硬盘中检索。 调整IIS高速缓存的容量需要修改注册表,表项如下: \HKEY_LOCAL_MACHINE IIS通过高速缓存系统句柄、目录列表以及其他常用数据的值来提高系统的性能。这个参数指明了分配给高速缓存的内存大小。如果该值为0,那就意味着“不进行任何高速缓存”。在这种情况下系统的性能可能会降低。如果你的服务器网络通讯繁忙,并且有足够的内存空间,可以考虑增大该值。必须注意的是修改注册表后,需要重新启动才能使新值生效。 2.使IIS使用处理器时间最长。服务器的CPU处理器能力总是有限的。哪一个应用程序占用处理器的时间最长,谁的性能就能得到最大的提高。 (1)在NT的控制面板中,双击系统图标。 3.服务器属性设置。在服务器属性里有一项可以使网络应用程序的总处理能力最大的选项,你当然应该选择它。 (1)在桌面上右键单击网络邻居图标,然后选择属性选项。 提高硬件配置来优化IIS性能 当进行了上述的优化配置,IIS的性能仍然没有什么明显改善的话,也许你应该考虑提高服务器配置了。如升级处理器,增加硬盘,升级网卡,增加内存等。 优化IIS的注意事项 为了避免以后的头疼,在安装IIS之时就应该注意到IIS的优化。比如: 1.为了提高性能和节约资源,应该只运行需要的协议。这一点很多管理员都没有注意,笔者曾见到在一台只作Web服务的机器上同时安装有NetBEUI、Tcp/IP和IPX协议。显然这是不合理的。 2.应该将IIS服务器,设置为独立的服务器,不要让服务器去承受域控制器要求的额外负荷。试想:服务器一边在响应用户的登录,一边还要提供IIS服务,性能能不下降吗? 3.可以把NT服务器的页交换文件分布到多个物理磁盘上,注意是多个“物理磁盘”,分布在多个分区上是无效的。另外,不要将页交换文件放在与WIndows NT引导区相同的分区中。 4.使用磁盘镜像或磁盘带区集可以提高磁盘的读取性能。 5.关于日志的记录,应该采用文件记录而不是记录到ODBC数据源。此外,还可以在记录期间增加用来记录日志的内存缓冲区的容量来减少磁盘的活动。该缓冲区的缺省容量值为64KB。 6.最好把所有的数据都储存在一个单独的分区里。然后定期运行磁盘碎片整理程序以保证在存储Web服务器数据的分区中没有碎片。使用NTFS有助于减少碎片。笔者推荐使用Norton的Speeddisk,可以很快地整理NTFS分区。 7.虽然SSL可以提供相当可靠的加密传输。但是所需的额外开销会导致IIS服务器速度下降,尤其是在处理大型文件的时候。所以应该只对确实需要保护的目录进行SSL加密。 |