by 塔利·史密斯
介绍
您可以采取各种步骤来优化 Windows Server 2008 R2 或 Windows Server 2008、IIS 7 及更高版本以及 Web 工作负载和 PHP 应用程序的 FastCGI 性能。这些过程通常可以通过在命令行窗口中运行 Appcmd.exe 命令并直接编辑配置文件或通过编写 Windows® Management Instrumentation (WMI) 脚本从 UI 执行。
确保FastCGI始终在本机PHP回收开始之前回收php-cgi.exe进程。FastCGI 进程回收行为由配置属性 instanceMaxRequests 控制。此属性指定 FastCGI 进程在回收之前将处理的请求数。PHP 也具有类似的进程回收功能,由环境变量 PHP_FCGI_MAX_REQUESTS 控制。通过将 instanceMaxRequests 设置为更小或等于 PHP_FCGI_MAX_REQUESTS,您可以确保原生 PHP 进程回收逻辑永远不会启动。
可以使用 IIS 管理器或使用命令行工具 AppCmd 配置 FastCGI 设置。
使用 IIS 管理器
-
若要使用 IIS 管理器配置 FastCGI 回收设置,您需要安装 IIS 管理包,然后在服务器级别选择“FastCGI 设置”。

图 1 IIS 管理器,FastCGI 设置
-
接下来,选择要配置的 FastCGI 应用程序,然后单击右侧“操作”窗格中的“编辑”。

图2 FastCGI设置界面
-
在“编辑 FastCGI 应用程序”对话框中,将“InstanceMaxRequest”设置为“10000”,然后单击“EnvironmentVariables”设置旁边的浏览按钮。

图 3 “编辑 FastCGI 应用程序”对话框
-
添加 PHP_FCGI_MAX_REQUESTS 环境变量并将其值设置为 10000。
注意
如果未配置这些设置,则使用以下默认设置:InstanceMaxRequests 为 200,PHP_FCGI_MAX_REQUESTS为 500(在大多数 PHP 构建中)。

图 4 环境变量集合编辑器
使用命令行
要通过 appcmd 配置 FastCGI 和 PHP 的回收行为,请使用以下命令:
C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000
C:\>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS'
禁用不需要的服务和进程
如果运行 Windows Server 2008 R2 或 Windows Server 2008 的服务器将是专用的 Web 服务器,则可以采取各种步骤来优化 Web 工作负载的性能。请注意,可以从 UI 或命令行轻松快速地执行这些过程。
请确保未安装 Windows Server 2008 安装中任何不需要的角色和功能。删除进程,例如:
- Microsoft Find Fast 和其他搜索索引服务。
- 三维 (3-D) 屏幕保护程序(可能会占用 CPU 资源)。
- 未使用的网络协议。
- 不需要的邮件服务器。
- 未使用的防病毒扫描程序以及用于鼠标和红外端口的硬件驱动程序。
若要使用 UI,请单击“开始”,单击“服务”,然后向下滚动到要禁用的服务,然后单击“属性”。单击“启动类型”下的箭头,然后单击“禁用”。
注意
禁用每个服务后,测试 Web 服务器是否正确运行,以确保没有禁用要继续使用的服务。此外,请注意依赖于要停止的服务的任何服务。
Windows Server 2008 中还有基于命令行的管理。当用户必须添加/删除服务器角色或其他软件时,早期版本的 Windows 几乎没有提供依赖项检查(如果有的话)。Windows Server 2008 中的简单命令可以为服务器管理员提供将添加或删除的组件列表。服务器管理器命令还提供了一种机制,用于执行服务器角色和功能的无人参与安装。可以选择安装单个角色或功能,也可以通过 XML 应答文件合并安装多个角色/功能。现在,您可以轻松地收集有关任何给定服务器的已安装角色和/或功能的信息,并将这些结果导出到 XML 以供记录。还可以确定哪些服务器组件将受到服务器角色或功能的安装或删除的影响。
若要优化 Windows Server 2008 或 Windows Server 2008 R2 性能,您可以:
- 在工作内存中运行 IIS 可分页代码,以最大限度地提高数据吞吐量。
- 将 IIS 进程 (Inetinfo.exe) 作为后台服务运行。
- 禁用 IIS 日志记录。
最小化 IIS 日志记录
除非需要,否则禁用网站、虚拟目录、文件和文件夹的日志记录。您可以使用 UI 或命令行。当日志记录打开时,服务器上会不断追加文本文件,详细说明有关网站的所有内容。但是,如果您正在监控带宽,这是必要的;定期打开日志记录以密切关注站点及其使用的带宽,然后在所有其他时间关闭日志记录。通常不需要永久保持登录状态,除非您确实想持续监控带宽。
若要使用 UI,请打开 IIS 管理器并导航到要管理的级别。在“功能视图”中,双击“日志记录”。在“日志记录”页上的“操作”窗格中,单击“禁用”以禁用日志记录。
若要使用命令行禁用日志记录,请使用以下语法:
C:\windows\system32\inetsrv>appcmd set config /section:httpLogging /dontLog:True
启用带宽限制
随着提供媒体内容的网站数量不断增加,许多企业的带宽成本可能非常高。此外,由于发送到客户端的媒体内容从未真正使用过,因此浪费了很大一部分媒体带宽。浏览视频网站的用户通常会在进入下一个视频或离开页面之前只观看视频的一部分。但是,使用渐进式下载来传送视频的 Web 服务器发送的数据通常比这几秒钟的播放时间所需的数据多得多。其中大部分数据从未被使用过。
例如,如果您的视频平均只有 5 秒的观看时间,但在这 30 秒内提供(缓冲)了 5 秒的视频数据,那么您可能会浪费超过 80% 的带宽。
使用比特率限制模块
IIS 包括一个比特率限制模块,该模块可自动检测最流行的视频类型的编码速率。您可以控制要预发送到客户端的数据量,以消除初始缓冲延迟(快速启动),以及要以编码速率的百分比传送内容。您还可以配置许多其他选项,例如最大带宽和并发连接数,并以编程方式控制模块。

图5 带宽限流
限制与站点的连接数
还可以限制单个网站可用的连接数。
- 在 IIS 管理器中,展开 Web 服务器,然后单击以选择该网站。
- 单击“操作”窗格中的“限制...”
- 选中“限制连接数”框
- 输入要允许的连接数。请注意,每个连接的客户端大约使用四个并发连接。
- 单击“确定”。
启用 CPU 监控
您还可以启用 CPU 监视来监视和自动关闭消耗大量 CPU 时间的工作进程。
- 在 IIS 管理器中,展开 Web 服务器并选择一个应用程序池。
- 单击“操作”选项卡中的“高级设置”。
- 在“CPU”部分的“限制”框中,键入所需的值。
- 单击“确定”。
使用 HTTP Keep-Alives
HTTP 保持活动响应标头通过在对服务器的多个请求中保持客户端/服务器连接处于打开状态来提高 Web 服务器性能。当客户端对网页内容发出多个请求时,打开的连接可提高性能,因为服务器可以更快地返回每个请求的内容。否则,服务器必须为每个请求打开一个新连接。默认情况下,在 IIS 中启用 HTTP 保持活动响应标头。
- 从 IIS 管理器中,导航到要管理的级别。
- 在“功能视图”中,双击“HTTP 响应标头”。
- 在“HTTP 响应标头”页上的“操作”窗格中,单击“设置通用标头”。
- 在“设置通用 HTTP 响应标头”对话框中,选中“启用 HTTP 保持活动状态”复选框,然后单击“确定”。
若要从命令行启用 HTTP keep-alive 标头,请使用以下语法:
C:\Windows\System32\inetsrv>appcmd set config /section:httpProtocol /allowKeepAlive:true | false
使用 HTTP 压缩
减少提供应用程序响应所需的带宽的最有效方法之一是使用 HTTP 压缩。这可以大大减少响应的大小,当应用于易于压缩的文本内容(如 HTML)时,通常会减少 10 倍。由于压缩基于 HTTP 1.1 协议中定义的内容编码协商,因此启用它对于不支持压缩的客户端来说是安全的 - 这些客户端只接收内容的未压缩版本。
IIS 提供两种压缩功能:
静态压缩会预先压缩静态内容并将其保存在磁盘上,从而允许将来的请求直接提供压缩内容,而不会产生压缩开销。动态压缩实时压缩响应,因此可以对应用程序生成的响应进行压缩。IIS 上的任何应用程序框架都可以利用动态压缩,包括 ASP、ASP.NET 或 PHP。
动态压缩通常不会产生令人望而却步的 CPU 开销。事实上,在繁忙的服务器上,动态压缩通常会导致不到总 CPU 使用率的 5%。动态压缩可以在一定程度上自由部署,以便为任何应用程序工作负载节省最大的带宽。
您可以通过配置压缩强度来进一步优化压缩开销,以实现所需的压缩与 CPU 开销之比。
可以使用 UI、在命令行窗口中运行 Appcmd.exe 命令、直接编辑配置文件或编写 WMI 脚本来配置 HTTP 压缩。
例如,若要从命令行启用动态内容压缩,请键入以下命令并按 Enter:
C:\Windows\System32\inetsrv>appcmd set config /section:urlCompression /doDynamicCompression:True
若要从 UI 中对特定站点启用压缩,请选择该站点,然后从“工作”窗格中选择“压缩管理工具”。选择是要压缩静态内容、动态内容,还是同时压缩两者。

图6 HTTP压缩
此功能可保护应用程序和静态图像文件,并且适用于接收许多请求的公共 Web 服务器上的网站或应用程序。此身份验证模式允许您在应用程序级别管理客户端注册和身份验证,而不是依赖于操作系统提供的身份验证机制。您可以使用内置成员资格数据库或自定义成员资格提供程序。
过去,人们通常会自己保护应用程序页面,并将图像和媒体内容开放给公众访问。除非通过自定义处理程序提供静态内容,否则将相同的基于 Internet 的身份验证方案扩展到静态内容并不容易。即使这不是一个完美的解决方案,因为您经常会失去性能和静态内容功能,例如静态压缩和远程请求支持。
使用 IIS,您可以为整个网站配置一次 Forms 身份验证和 URL 授权规则,并且您知道您的 ASPX 页、PHP 脚本、HTML 文件和媒体内容受到保护,不会受到未经授权的访问。
可以通过使用 UI、在命令行窗口中运行 Appcmd.exe、直接编辑配置文件或编写 WMI 脚本来启用窗体身份验证。
-
从 IIS 管理器中,导航到要管理的级别。
-
在“功能视图”中,双击“身份验证”。
-
在“身份验证”页上,选择“窗体身份验证”。
-
在“操作”窗格中,单击“启用”以使用具有默认设置的 Forms 身份验证。