优化 IIS 性能

应用 IIS 配置选项以提高 IIS 性能

Internet Information Services (IIS) 公开了许多影响 IIS 性能的配置参数。 本主题介绍其中几个参数,并提供设置参数值以提高 IIS 性能的一般指导。

仅记录基本信息或完全禁用 IIS 日志记录

应在生产环境中最小化甚至禁用 IIS 日志记录。 若要禁用日志记录,请执行以下步骤:

  1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

  2. 在“ 连接 ”窗格中,单击以展开 “站点”,单击以选择要为其禁用日志记录的网站,单击以选择“ 功能视图”,然后双击“ 日志记录 ”功能。

  3. 单击“操作”窗格中的“禁用,禁用此网站的日志记录。

在生产环境中禁用 IIS ASP 调试

应在生产环境中禁用 IIS ASP 调试。 若要禁用 IIS ASP 调试,请执行以下步骤:在“ 连接 ”窗格中,单击展开“ 站点”,单击以选择要为其禁用 ASP 调试的网站,单击以选择“ 功能视图”,然后双击 ASP 功能。 单击以展开 “编译”,单击以展开“ 调试属性”,并验证 “启用客户端调试”“启用服务器端调试” 是否都设置为 False

  1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

  2. 在“ 连接 ”窗格中,单击展开“ 站点”,单击以选择要为其禁用 ASP 调试的网站,单击以选择“ 功能视图”,然后双击 ASP 功能。

  3. 单击以展开 “编译”,单击以展开“ 调试属性”,并验证 “启用客户端调试”“启用服务器端调试” 是否都设置为 False

  4. 如有必要,请在“操作”窗格中单击“应用”。

    通过在 web 应用程序的 web.config 文件中指定 <compilation debug=“false”> 部分,禁用 ASP.NET 应用程序和 Web 服务的调试。

优化“每个处理器的 ASP 线程数限制”属性的值

每个处理器的 ASP 线程数限制 ”属性指定 IIS 创建的每个处理器的最大工作线程数。 增加“每处理器线程数限制”的值,直到处理器利用率达到至少 50% 或更高。 此设置可能会显著影响 Web 应用程序的可伸缩性和服务器的一般性能。 由于此属性定义了可以同时执行的最大 ASP 请求数,因此,除非 ASP 应用程序对外部组件进行扩展调用,否则此设置应保留默认值。 在这种情况下,可以增加“每处理器线程数限制”的值。 这样服务器就可以创建更多线程来处理更多并发请求。 每个处理器的线程数限制的默认值为 25。 此属性的最大建议值为 100。

若要增加“每处理器线程数限制”的值,请执行以下步骤:在“ 连接 ”窗格中,选择 Web 服务器,单击以选择“ 功能视图”,然后双击 ASP 功能。

  1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

  2. 在“ 连接 ”窗格中,选择 Web 服务器,单击以选择“ 功能视图”,然后双击 ASP 功能。

  3. 单击以展开“行为”下的“限制属性”,单击“每个处理器的线程数限制”,为“每个处理器的线程数限制”输入所需的值,然后在“操作”窗格中单击“应用”。

    有关如何修改 IIS 7.5/7.0 <asp> 元素的 <limits> 元素中的属性的详细信息,请参阅 ASP Limits <> (https://go.microsoft.com/fwlink/?LinkId=157483) 。

注意

由于此属性只能在服务器级别应用,因此修改此属性会影响服务器上运行的所有网站。

优化 ASP 队列长度属性的值

优化此属性的目的是确保良好的响应时间,同时最大程度地减少服务器在 ASP 请求队列已满时向客户端发送 HTTP 503 (服务器太忙) 错误的频率。 如果 ASP 队列长度属性的值太低,服务器将以更高的频率发送 HTTP 503 错误。 如果 ASP 队列长度属性的值过高,则用户可能会感觉到服务器没有响应,而实际上他们的请求正在队列中等待。 通过在高流量期间观察队列,应识别出 Web 请求高峰和谷值模式。 记下峰值,并将 ASP 队列长度属性的值设置为恰好高于峰值的值。 使用队列处理短期峰值,确保响应时间,并限制系统以避免在持续出现意外峰值时过载。 如果没有用于调整 ASP 队列长度属性的数据,一个很好的起点是设置队列与总线程的一对一比率。 例如,如果“每个处理器的 ASP 线程数限制”属性设置为 25,并且有 4 个处理器 (4 * 25 = 100 个线程) ,请将“ASP 队列长度”属性设置为 100 并从该处进行优化。

若要增加“队列长度”属性的值,请执行以下步骤:

  1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

  2. 在“ 连接 ”窗格中,选择 Web 服务器,单击以选择“ 功能视图”,然后双击 ASP 功能。

  3. 单击以展开“行为”下的“限制属性”,单击“队列长度”,为“队列长度”输入所需的值,然后在“操作”窗格中单击“应用”。

    有关如何修改 IIS 7.5/7.0 <asp> 元素的 <limits> 元素中的属性的详细信息,请参阅 ASP Limits <> (https://go.microsoft.com/fwlink/?LinkId=157483) 。

注意

由于此属性只能在服务器级别应用,因此修改此属性会影响服务器上运行的所有网站。

优化 MaxPoolThreads 注册表项

此设置指定要为每个处理器创建的池线程数。 池线程watch网络的请求和处理传入请求。 MaxPoolThreads 计数不包括 ISAPI 应用程序使用的线程。 通常,每个处理器不应创建超过 20 个线程。 MaxPoolThreads 是位于 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\InetInfo\Parameters\ 的REG_DWORD注册表项,默认值为 4。

禁用 WCF 服务跟踪

使用配置编辑器工具 (SvcConfigEditor.exe) 在生产环境中禁用 WCF 服务跟踪。 有关配置编辑器工具的详细信息,请参阅 配置编辑器工具 (SvcConfigEditor.exe) (https://go.microsoft.com/fwlink/?LinkID=127070) 。

为 IIS 7.5/7.0 集成模式配置 ASP.NET 2.0 MaxConcurrentRequests

当 ASP.NET 2.0 托管在集成模式下的 IIS 7.5/7.0 上时,使用线程的方式与经典模式下的 IIS 7.5/7.0 上的处理方式不同。 当 ASP.NET 2.0 托管在集成模式下的 IIS 7.5 上时,ASP.NET 2.0 会限制并发执行请求的数量,而不是同时执行请求的线程数。 对于同步方案,这将间接限制线程数,因为请求数将与线程数相同。 但对于异步方案,请求数和线程数可能会大不相同,因为请求数可能远多于线程。 在集成模式下在 IIS 7.5 上运行 ASP.NET 2.0 时,将忽略 machine.config 中“httpRuntime”元素的 minFreeThreads 和 minLocalRequestFreeThreads。 对于 IIS 7.5 集成模式,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 内名为 MaxConcurrentRequestsPerCPU 的 DWORD 确定每个 CPU 的并发请求数。 默认情况下,注册表项不存在,每个 CPU 的请求数限制为 12。 .NET Framework 3.5 SP1 包括对 v2.0 二进制文件的更新,该二进制文件支持通过 aspnet.config 文件配置 IIS 应用程序池。 此配置仅适用于集成模式, (经典/ISAPI 模式) 忽略这些设置。下面列出了具有默认值的新 aspnet.config 配置部分:

<system.web>
   <applicationPool maxConcurrentRequestsPerCPU="12" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>

在 IIS 7.5 集成模式下,machine.config 文件的“processModel”部分中的 maxWorkerThreads 和 maxIoThreads 参数本身不用于控制正在运行的请求数,但它们仍用于控制 ASP.NET 使用的 CLR 线程池的大小。 当 machine.config 的“processModel”部分具有“autoConfig=true” (这是默认设置) 时,这将为每个逻辑 CPU 提供最多 100 个工作线程 (MaxWorkerThreads) 。 因此,具有 2 个双核 CPU 的常用商用服务器将具有 400 个 MaxWorkerThreads。 这应该足以满足除要求最苛刻的应用程序之外的所有应用程序。

有关在 IIS 7.5 上配置 ASP.NET 线程使用情况的详细信息,请参阅 Thomas Marquardt 的 Blog on IIS 7.0 ASP.NET Thread Usage (https://go.microsoft.com/fwlink/?LinkId=157518) 。

为 IIS 7.5/7.0 集成模式配置 ASP.NET 4 个 MaxConcurrentRequests

使用 .NET Framework 4 时,maxConcurrentRequestsPerCPU 的默认设置为 5000,这是一个非常多的数字,因此将允许并发执行大量异步请求。 有关详细信息,请参阅 <applicationPool> Element (Web Settings) (https://go.microsoft.com/fwlink/?LinkID=205339) 。

对于 IIS 7.5/7.0 集成模式,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0 内名为 MaxConcurrentRequestsPerCPU 的 DWORD 确定每个 CPU 的并发请求数。 默认情况下,注册表项不存在,每个 CPU 的请求数限制为 5000。

启用 IIS HTTP 压缩

若要更有效地使用可用带宽,请启用 IIS HTTP 压缩。 无论内容是从本地存储还是 UNC 资源提供,HTTP 压缩都能在启用了压缩的浏览器和 IIS 之间提供更快的传输时间。

  • 若要在 Web 服务器级别配置压缩,请执行以下操作:

    1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

    2. 在“ 连接 ”窗格中,选择 Web 服务器,单击以选择“ 功能视图”,然后双击“ 压缩 ”功能。

    3. 设置所需的压缩选项,然后在“操作”窗格中单击“应用”。

  • 在网站级别配置压缩:

    1. 单击 “开始”,指向“ 所有程序”,单击“ 管理工具”,然后单击“ Internet Information Services (IIS) 管理器”。

    2. 在“ 连接 ”窗格中,单击展开 “站点”,单击以选择要为其配置压缩的网站,单击以选择“ 功能视图”,然后双击“ 压缩 ”功能。

    3. 设置所需的压缩选项,然后在“操作”窗格中单击“应用”。

另请参阅

优化性能