优化 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 文件中指定 <编译 debug=“false”> 部分,禁用 ASP.NET 应用程序和 Web 服务的调试。

调整 ASP 每个处理器线程数限制属性的值

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

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

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

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

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

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

注释

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

优化 ASP 队列长度属性的值

优化此属性的目的是确保良好的响应时间,同时最大程度地减少服务器在 ASP 请求队列满时向客户端发送 HTTP 503(服务器太忙)错误的频率。 如果 ASP 队列长度属性的值太低,服务器将发送具有更高频率的 HTTP 503 错误。 如果 ASP 队列长度属性的值过高,则用户可能会发现服务器在实际上请求在队列中正在等待时不响应。 通过在高流量期间监视队列,应识别 Web 请求高峰和谷的模式。 记下峰值,并设置 ASP 队列长度属性的值,该值刚好高于峰值。 使用队列来处理短期峰值,确保及时响应,并调控系统以避免在持续、意外的峰值发生时过载。 如果没有用于调整 ASP 队列长度属性的数据,则良好的起点是设置队列与总线程的一对一比率。 例如,如果 ASP Threads Per Processor Limit 属性设置为 25,并且你有四个处理器(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 注册表项

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

禁用 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 个双核中央处理器的普通商用服务器将有 400 个 MaxWorkerThreads。 这应该足以满足除最苛刻应用程序之外的所有应用程序。

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

为 IIS 7.5/7.0 集成模式配置 ASP.NET 4 最大并发请求数

使用 .NET Framework 4 时,maxConcurrentRequestsPerCPU 的默认设置为 5000,这是一个非常多的数字,因此将允许大量异步请求并发执行。 有关详细信息,请参阅 <applicationPool> 元素(Web 设置)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. 设置所需的压缩选项,然后单击操作窗格中的应用

另请参阅

优化性能