默认情况下,SOAP、HTTP 和基于 HTTP 的 WCF 适配器(通常为 .NET)仅打开两个从每个 BizTalk 主机实例到任何特定目标服务器的并发 HTTP 连接。 例如,如果你有一个 SOAP 发送端口发送消息到http://www.contoso.com/SomeWebService.asmx
,则默认情况下,每个 BizTalk Server 上运行的每个主机实例将只打开两个并发的 HTTP 连接到www.contoso.com
,无论需要发送多少条消息。
此设置符合 HTTP 1.1 规范的 IETF RFC,尽管它适用于用户方案,但它未针对高吞吐量服务器到服务器通信进行优化。 默认设置有效地将每个目标服务器的出站 SOAP 和 HTTP 调用限制为每个 BizTalk Server 主机实例同时发送两次。
为 IIS 7.0 集成模式配置 ASP.NET MaxConcurrentRequests
当 ASP.NET 2.0 托管在集成模式下的 IIS 7.0 上时,线程的使用方式不同于在 IIS 6.0 或经典模式下的 IIS 7.0 上。 ASP.NET 2.0 托管在集成模式下的 IIS 7.0 上时,ASP.NET 2.0 限制并发执行的请求数,而不是并发执行请求的线程数。 对于同步方案,这将间接限制线程数,因为请求数将与线程数相同。 但对于异步方案,请求和线程数可能会大相径庭,因为请求数可能比线程多得多。 在集成模式下在 IIS 7.0 上运行 ASP.NET 2.0 时,将忽略 machine.config 中“httpRuntime”元素的 minFreeThreads 和 minLocalRequestFreeThreads。 对于 IIS 7.0 集成模式,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>
作为经验法则,MaxConcurrentRequestsPerCPU 应设置为非常大的值,例如 5000。
在 IIS 7.0 集成模式下,machine.config 文件的“processModel”部分中的 maxWorkerThreads 和 maxIoThreads 参数并不是用于控制正在运行的请求数量,而是仍用于控制 ASP.NET 使用的 CLR 线程池的大小。 如果 machine.config 的“processModel”部分具有“autoConfig=true”(这是默认设置),则会为每个逻辑 CPU 提供最多 100 个工作线程(MaxWorkerThreads)。 因此,具有 2 个双核中央处理器的普通商用服务器将有 400 个 MaxWorkerThreads。 这应该足以满足除最苛刻应用程序之外的所有应用程序。
有关在 IIS 7.0 和 6.0 上配置 ASP.NET 线程使用情况的详细信息,请参阅 Thomas Marquardt 关于 IIS 7.0 和 6.0 上的 ASP.NET 线程使用情况的博客 (https://go.microsoft.com/fwlink/?LinkId=157518)。
仅记录重要信息或完全禁用 IIS 日志记录
应在生产环境中最小化甚至禁用 IIS 日志记录。 若要禁用日志记录,请执行以下步骤:
单击“ 开始”,指向 “所有程序”,单击 “管理工具”,然后单击“ Internet Information Services”(IIS)管理器。
在“ 连接 ”窗格中,单击以展开 “网站”,单击以选择要禁用日志记录的网站,单击以选择 “功能视图”,然后双击 “日志记录 ”功能。
单击“操作”窗格中的“禁用”可禁用此网站的日志记录。
在生产环境中禁用 IIS ASP 调试
应在生产环境中禁用 IIS ASP 调试。 若要禁用 IIS ASP 调试,请执行以下步骤:
单击“ 开始”,指向 “所有程序”,单击 “管理工具”,然后单击“ Internet Information Services”(IIS)管理器。
在 “连接 ”窗格中,单击以展开 “站点”,单击以选择要禁用 ASP 调试的网站,单击以选择 “功能视图”,然后双击 ASP 功能。
单击以展开 编译,单击以展开 调试属性,并验证 “启用客户端调试 ”和 “启用服务器端调试 ”都设置为 False。
如有必要,请在操作窗格中单击应用。
通过在 web 应用程序的 web.config 文件中指定 <编译 debug=“false”> 部分,禁用 ASP.NET 应用程序和 Web 服务的调试。
调整 ASP 每个处理器线程数限制属性的值
ASP Threads Per Processor Limit 属性指定 IIS 创建的每个处理器的最大工作线程数。 增加每个处理器的线程数限制的值,直到处理器利用率达到至少 50% 或更高版本。 此设置可能会极大地影响 Web 应用程序的可伸缩性和服务器的一般性能。 由于此属性定义了可以同时执行的 ASP 请求的最大数目,因此此设置应保留默认值,除非 ASP 应用程序正在对外部组件进行扩展调用。 在这种情况下,可以增加每个处理器的线程数限制的值。 这样做允许服务器创建更多线程来处理更多的并发请求。 每个处理器限制的线程默认值为 25。 此属性的最大建议值为 100。
若要增加每个处理器的线程数限制的值,请执行以下步骤:
单击“ 开始”,指向 “所有程序”,单击 “管理工具”,然后单击“ Internet Information Services”(IIS)管理器。
在 “连接 ”窗格中,选择 Web 服务器,单击以选择 “功能视图”,然后双击 ASP 功能。
单击以展开“限制属性”下的“行为”,单击“每个处理器的线程数限制”,输入每个处理器的线程数限制所需的值,然后单击“操作”窗格中的“应用”。
有关如何修改 IIS 7.0 <asp> 元素的限制<元素中的>属性的详细信息,请参阅 ASP 限制<限制>(https://go.microsoft.com/fwlink/?LinkId=157483)。
注释
由于此属性只能在服务器级别应用,因此对此属性的修改会影响服务器上运行的所有网站。
注释
IIS 7.0 的 每个处理器线程限制 属性替换了 IIS 6.0 的 ASPProcessorThreadMax 元数据库设置。 有关 IIS 6.0 ASPProcessorThreadMax ASP 元数据库设置的信息,请参阅 MSDN 上的 优化 ASP 元数据库设置 (https://go.microsoft.com/fwlink/?LinkId=158834)。
优化 ASP 队列长度属性的值
优化此属性的目的是确保良好的响应时间,同时最大程度地减少服务器在 ASP 请求队列满时向客户端发送 HTTP 503(服务器太忙)错误的频率。 如果 ASP 队列长度属性的值太低,服务器将发送具有更高频率的 HTTP 503 错误。 如果 ASP 队列长度属性的值过高,则用户可能会发现服务器在实际上请求在队列中正在等待时不响应。 通过在高流量期间监视队列,应识别 Web 请求高峰和谷的模式。 记下峰值,并设置 ASP 队列长度属性的值,该值刚好高于峰值。 使用队列来处理短期峰值,确保及时响应,并调控系统以避免在持续、意外的峰值发生时过载。 如果没有用于调整 ASP 队列长度属性的数据,则良好的起点是设置队列与总线程的一对一比率。 例如,如果 ASP Threads Per Processor Limit 属性设置为 25,并且你有四个处理器(4 * 25 = 100 个线程),请将 ASP 队列长度属性设置为 100 并从那里进行优化。
若要增加队列长度属性的值,请执行以下步骤:
单击“ 开始”,指向 “所有程序”,单击 “管理工具”,然后单击“ Internet Information Services”(IIS)管理器。
在“ 连接 ”窗格中,选择 Web 服务器,单击以选择 “功能视图”,然后双击 ASP 功能。
单击展开“限制属性”(位于“行为”下),单击“队列长度”,输入目标的队列长度值,然后在“操作”窗格中单击“应用”。
有关如何修改 IIS 7.0 <asp> 元素的限制<元素中的>属性的详细信息,请参阅 ASP 限制<限制>(https://go.microsoft.com/fwlink/?LinkId=157483)。
注释
由于此属性只能在服务器级别应用,因此对此属性的修改会影响服务器上运行的所有网站。
注释
IIS 7.0 的 ASP 队列长度 属性替换 IIS 6.0 AspRequestQueueMax ASP 元数据库设置。 有关 IIS 6.0 AspRequestQueueMax ASP 元数据库设置的信息,请参阅 MSDN 上的 优化 ASP 元数据库设置 (https://go.microsoft.com/fwlink/?LinkId=158834)。
优化 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)。