网站首页/技术开发列表/内容

运用 IIS 5.0 调整 Web服务器的艺术与科学--4

技术开发2022-07-01阅读
indows 2000 及 IIS 5.0 中的功能及设置

  如果您目前正在含 IIS 4.0 的 Windows NT Server 4.0 上执行一个经过适当调整的站点,则该站点在 Windows 2000 Server 及 IIS 5.0 上应可顺利地执行。相关信息请参阅 Windows 2000 Performance Test by ZD Labs。 当进行迁移时,您还是要监视你的服务器及站点。您将会注意到在 Windows 2000 及 IIS 5.0 中有些针对增强性能及简化管理而设计的新功能。此外,在 IIS 4.0 中的默认的设置值到了 IIS 5.0 之后已有所改变。本节将讨论这些功能及变化。

  将 Windows 2000 设置为应用程序服务器

  如果打算将服务器主要当作Web服务器使用,则将服务器计算机设为应用程序服务器是提高性能的最快方法。如此可让您利用较高的 SMP 缩放性、更高的网络性能,及更多 Web 应用程序物理内存的支持。对于执行 COM 的应用程序,则使用 Windows 2000 当作应用程序服务器也会对COM+ 有更多好处。此外,您可以将 COM+ 的交易处理功能当作一个交易监视器使用,以提高数据库应用程序的性能。Windows 2000 Server 会默认安装成文件服务器,因此您必须确定在安装过程中选择了应用程序服务器。不过,即使没有选取,在安装之后再将服务器设为应用程序服务器也很容易。若要选取︰

  1.按一下 [开始],并指向 [设置] 后,再按 [网络和拨号连接]。
  2.选取 [区域连接],并开启它的属性。
  3.选取 [File and Printer Sharing for Microsoft Networks],并开启它的属性。
  4.在 [服务器最佳化] 选项卡上选取 [网络应用程序的数据传输量最大化]。

  此设置将于重新启动服务器之后才生效。

  IISReset 公用程序

  IIS 5.0 提供一些新功能及默认设置,使得执行 IIS 5.0 的站点更加可靠且容易管理。其中第一个功能是新的 IISReset.exe,它是一个让您不必重新开机就能停止及重新启动 IIS 服务的公用程序。IISReset 在默认情况下会在它们失败时重新启动您的服务。您也可以使用 IISReset 从远程启动、停止或暂停您的服务,或视需要重新启动您的服务器计算机。您应该在没有办法时才重新启动。如果使用 IISReset 重新启动您的网络服务,用户会遭遇短暂暂停,此时他们只要按一下重新整理即可取得新网页。如果重新启动整台计算机,则无法使用的时间会更久。您也可以隔离您要停止的服务。例如,如果是在和Web服务器相同的计算机上执行 SMTP 服务器,则可选择只要停止并重新启动您的 Web 服务,而不是连SMTP 服务也跟着停止。

  您必须知道如果经常重新开机及重新启始(按Reset键)会有损于性能资料的完整性。如果使用 IISReset 自动重新启动服务,就比较不会发生这个问题,因此您应该不断地监视 [事件记录文件],以获取重新开机的情况。

  IIS 设置

  [AspProcessorThreadMax Metabase 的内容已改变。它原本在 IIS 4.0 中是称为 ProcessorThreadMax,而且是存在注册表(Registry)中,其默认值为 10。在 IIS 5.0 中的新默认值是 25 。这个设置是指每个处理器及每一进程︰在双 CPU 的系统上,每一进程中的工作线程数目可达 AspProcessorThreadMax 值的两倍之高,或高达 50 个工作自变量 (这是指在双 CPU 上的默认值的数目)。如果正在执行多个高度隔离的 ASP 应用程序,则每一个进程会有一组独立的工作线程。

  附注︰ASP 会以 CPU 个数加上 7 的工作线程数目开始。当 ASP 请求队列的大小超过某个临界值时,它会建立更多线程。

  AspThreadGateEnabled 内容已添加到 Metabase 中。它在默认值是关闭的。如果开启此内容,则 IIS 会执行线程传送,从而动态地控制当前线程的个数,以响应不同的负载状态。当 CPU 用量降到 50% 以下时,可能表示线程被阻断 (例如正在等待外部数据库传回查询的结果),或纯粹表示负载量低, IIS 5.0 会增加使用中的线程数目,以便实时服务其它请求。当处理器用量超过 80% 时 (代表高负载量),IIS 5.0 会撤消线程,以减少内容切换的数量。您可以设置上限及下限︰AspThreadGateLoadLow 默认是 50%;AspThreadGateLoadHigh 默认是 80 %。不管AspThreadGateEnabled 的值如何,ASP 进程的工作线程一定不会超过 CPU 个数乘以AspProcessorThreadMax。

  对于需要处理大量 ASP 的站点,最好是通过开启及关闭线程传送来测试它的性能,看看会有什么效果。根据您的观察作最后决定。对于主要是由静态文件组成的站点,请开启设置并监视服务器性能,看看传输量及响应时间是否有改善。

  IIS 5.0 也改变了 ASP Template Cache的默认行为。在 IIS 4.0 中,「ASP Template Cache」的限制默认为 -1。使用这个设置,缓存会增加到无限大。在含有大量 ASP 内容的网站上,「ASP Template Cache」常会用满服务器上所有的 RAM。相反地,IIS 5.0 默认限制是 250 个文件。因为每一个站点都有自己的需求,所以您应重设此限制,以符合您站点的特殊需要。或许要完成这项工作最简单的方式就是监视您在增减此值时,服务器的性能会有什么变化。因为在这个缓存中的一个项目可以指向「ASP Script Engine Cache」中一个或多个项目,只有在「ASP Script Engine Cache」中能找到 ASP 页中的脚本文件时才会达到最佳性能,所以绝对不要将「ASP Template Cache」的限制设为零。这样做可防止发生存取「ASP Script Engine Cache」的情况,因为要参照特定 .asp 文件的「ASP Script Engine Cache」项目只能通过此样本做到。因此,如果没有缓存任何模板,则「ASP Script Engine Cache」等于毫无作用。存取「ASP Script Engine Cache」的性能高于存取「ASP Template Cache」的性能,因此如果阻断了存取「ASP Script Engine Cahce」的机会,则除非您所有的网页都是静态网页,否则性能会严重受损。在从 IIS 4.0 迁移到 IIS 5.0,「ASP Script Engine Cache」的限制已从 30 个文件增加到125 个文件。若要判定是否需要改变缓存设置,应留意响应时间、队列中的 ASP 请求个数、内容切换的数目,以及 CPU 使用的容量。

  附注:「ASP Script Engine Cache」设置应至少等于服务器上 CPU 个数加上 1,再乘上 AspProcessorThreadMax 设置的值。

  此外,您应考虑调整IIS File Cache的默认值。您可以将这些设置添加到注册表中,以修改 IIS 5.0 的默认行为。您应考虑增加的第一个设置是 MemCacheSize 对象;如果它不存在于注册表中,则默认行为允许缓存最大增至可用物理内存的一半。这样才能确保 IIS 可以与非专用Web服务器上的应用程序适当地交互。尝试增加此限制 (以 MB 为单位指定) 并监视性能来看看是否能获得好处。您应考虑增加的第二个注册表对象是 MaxCachedFileSize。这个 IIS 默认行为允许缓存中的最大文件大小为 256KB。如果您的网站中有数个经常存取的大型 .jpg 文件,则可以提高这个限制,以测试大于 256KB 的缓存文件能否在您的站点上运行。请注意,如果文件大小是大约 200 到 300KB,则当您存取它们时,所得的性能提升将逐渐变小。对于较小的文件,从磁盘读取的负担比从「IIS 文件缓存」读取的负担来得更大。对于较大文件来说,您不会获得太多性能上的提升;只会浪费内存。IIS 会定期从最近未被请求的缓存文件中清除 (默认是最近 30 秒内)。此临界点是由ObjectCacheTTL (TTL 代表存留时间) 注册表设置决定的;此对象默认不出现在注册表中。如果您有足够的内存,则将此 TTL 调高会很有效。

  关于 IIS 及 ASP 如何使用缓存来处理连接请求的讨论,请参阅〈附录 3︰ASP 缓存〉。

  进程隔离

  IIS 4.0 介绍了在进程外执行 Web 应用程序的概念。这个功能为 Web 服务器建立了更高的稳定性,但也产生相当大的性能成本。在 IIS 5.0 中,进程外(out-of-process)应用程序的性能已获得改善,尤其是对 APS 更明显。不过,相较于 IIS 5.0 进程内(in-process)的应用程序,还是有些性能降级的现象。除了更高的性能外,在进程外(out-of-process)执行应用程序的概念也有所延伸。您现在可以在一个缓冲池的(pooled)进程外环境中执行 Web 应用程序。

  在 Web 服务进程中执行的应用程序 (Inetinfo.exe) 能产生更高的性能,但是因不良应用程序而导致 Web 服务无法使用的风险也更高。建议的设置是让 Inetinfo.exe 在自己的进程中执行、让负担重要任务的应用程序在自己的进程中执行 (高度保护),并让剩余的应用程序在一个共享的缓冲池进程 (中度保护) 中执行。若要获得最佳性能和可靠性,请以中度保护执行 ASP 应用程序,并将所有 COM+ 组件设置为链接库应用程序,而非服务器应用程序。

  如果决定在单独的进程中执行您的应用程序,或在单一的进程中执行其它应用程序,则必须从 ][主目录] 或 [虚拟目录] 属性页上的 [应用程序保护]下拉列表中选取 [高 (隔离的)] 或 [中 (缓冲池的)]。您应先建立一个应用程序目录并将它指定为「主目录」或「虚拟目录」(如果尚未这样做的话)。所有新应用程序默认会以中度保护执行。

  这些注册表设置及 Metabase 内容的相关信息,请参阅〈附录 1︰性能设置〉。本节中所提功能的相关信息,请参阅 IIS 5.0 及 Windows 2000 联机文档。

  调整及疑难排除的建议

  如果您判定需要处理特定硬件驱动的性能问题,请考虑使用下列建议。

  ·升级到较大的「L2 缓存」。如果判定需要添加或升级处理器,请选择有大型 (L2) 缓存的处理器。例如 IIS 等服务器应用程序可以从大型处理器缓存中获益,因为它们的指示路径牵涉到许多不同的组件,而且它们必须存取大量资料。若想提升执行 IIS 5.0 的服务器的性能,建议您使用大量处理器缓存(如果是处理器外部的缓存,建议使用 2 MB 或以上,如果在 CPU 芯片上,则请使用可用的最大值)。

  ·升级到更快的 CPU。网络应用程序特别能从更快的处理器获益。

  ·设置「活动的连接超时时间」。若要尽可能地抵抗网络等待时间,请设置活动的连接超时时间。如果您执行的是高传输量的网站,这将是非常重要的。开启的连接会使性能降级。ConnectionTimeout Metabase 内容默认会设为 15 分钟。此内容的相关信息,请参阅〈附录 1︰性能设置〉。

  ·使用「过期标题」。在所有静态及动态内容上设置「过期」标题,让这两种内容可以存放在客户端的缓存中。如此可加快响应时间、减少服务器上的负载及网络上的传输量。例如,您可以建立一个标题,指定如果用户已经造访过您的站点时,不要下载您公司的标帜 .jpg 檔。若要为静态内容设置「过期」标题,请使用 [HTTP 标题] 内容页。若要为动态内容设置「过期」标题,请使用 Response.AddHeader 方法。此方法的相关信息,请参阅 IIS 5.0 联机文档。

  ·确定已启用「ASP Buffering」。「ASP 缓冲处理」默认会在全新安装 Windows 2000 之后启用。如果是从 Windows NT 4.0 及 IIS 4.0 升级,您可能需要手动启用它。「ASP 缓冲处理」可让所有来自应用程序的输出在通过网络传给客户端浏览器之前,先收集在缓冲区中。 如此可以降低网络传输量及响应时间。虽然缓冲处理可以降低响应时间,但可能会让用户察觉网页的速度变慢,因为除非网页已完成执行,否则用户看不见任何信息。审慎地使用 Response.Flush 可以改善交互的感觉。Response.Flush 方法的相关信息,请参阅 IIS 5.0 联机文档。相关信息,请参阅〈附录 1︰性能设置〉中的 AspBufferingOn Metabase 项目。

  ·延长连接队列及使用 HTTP Keep-Alives。如果您判定您服务器的带宽不足以满足需要,并且正计划增加请求负载,则可以通过执行两个动作让网络带宽的使用更理想︰延长连接队列,及确定HTTP Keep-Alives 已启用。

  每一个 IIS 5.0 服务都有一个连接队列,而且皆设为 15 个项目。如果这个数字在负载量下不符合您的需求,则通过将 ListenBackLog 参数添加到注册表中,并将此值设置为需要服务器维持的最大连接请求数目,即可增加它。相关信息,请参阅〈附录 1︰性能设置〉。

HTTP Keep-Alives 会保持客户端与服务器之间的连接,即使初始请求已完成也是如此。这个功能可以缩短等待时间、减少 CPU 负荷,及最佳化带宽。HTTP Keep-Alives 是默认启用的。如果它们已停用,但您又想启用它们,请在 [Internet 服务管理员] 中选取一个站点,开启该站点的 [属性] 页,并按一下 [性能] 选项卡后,再选取 [HTTP Keep-Alives] 复选框。

  ·缩小文件大小。您可以通过缩小服务中的文件大小来增进Web服务器的性能。图像文件应以适当的压缩格式存放。尽可能限制图像及其它大型文件的数目。通过缩减 HTMP 及 ASP 程序代码也可以缩小文件大小。从 ASP 页中删除不必要的程序代码区块,并确定您的 HTML 文件编写得很有效率。

  ·将记录文件存放在个别的磁盘上,并删除不需要的信息。如果您的服务器控制了多个站点,则每一个站点会建有个别的日志文件;这些日志文件在向磁盘写入时会在您的服务器上造成瓶颈。您应该将日志存放在不同于 Web 服务器的磁盘分区或磁盘上。另一个减少磁盘瓶颈的方法是避免记录不重要的信息。例如,您可以将所有图像文件放在一个虚拟目录 (例如 /images) 中,并停用该目录的日志。若要这样做,请开启该目录的内容页,清除 [日志查阅次数] 复选框,并按一下 [确定]。您也可以使用脚本文件或 ISAPI 过滤器来执行这项调整作业。如果您的站点是特别忙碌的大型站点,那么这项作业可以为您省下每天好几千兆的磁盘空间,以及大量的日志后处理时间。

  ·使用 RAID 及等量分配。若要增加磁盘存取,请使用 RAID 及等量磁盘组。您也许要考虑使用一个有较大 RAM 缓存的磁盘驱动器控制器。如果您的站点倚赖频繁的数据库存取,则请将数据库移到另一台计算机上。

  ·需要时才使用「CPU 限制」。IIS 5.0 介绍两种处理不良应用程序的新功能︰一个是进程记录,它会记录网站使用的 CPU 及其它资源;另一个是进程限制,它会限制网站可以使用的资源数量。

  进程记录及进程限制适用于 CGI (Common Gateway Interface) 应用程序及在进程外(out-of-process)执行的应用程序。您无法为进程内(in-process)的应用程序或在新 IIS 5.0 进程外缓冲池 (中度保护) 中执行的应用程序启动记录。

  若要启用进程记录

  1.在 [Internet 服务管理器] 中选取您要建立进程记录的网站。

  2.开启站点的属性页,并按一下 [主目录] 选项卡。

  3.在 [应用程序保护] 方块中选取 [高 (独立的)]。

  4.在站点的内容页上按一下 [Web站点] 选项卡,并确定选取 [启用记录]。

  5.在 [Web站点] 内容页上按一下 [属性] 按钮,并选取[扩充内容] 的 [处理帐户]。

  前两个步骤会将网站设置为在进程外执行,后两个步骤会启动该站点的进程记录。

  例如,如果您是 ISP,且您的某个用户站点正在使用的 CPU 时间超过它应有的部份,您就可以启动程序处理记录并延长记录,以记下「工作对象」计数器的数值。有了从进程记录收集到的信息之后,您就可以决定是否要在您的安装中升级服务器、调整这位特殊用户的费用,或限制该站点可以使用的资源数量。

  在决定该用户的站点正在使用的资源数量之后,您可能想要限制这位用户只能使用您的可用资源中某个百分比的数量,这样可以释放资源供其它用户使用。若要限制站点的资源,请在进程外执行站点应用程序,然后按下列方式启用进程限制︰

  1.在站点的内容页上按一下 [性能] 选项卡。

  2.选取 [启用作业限制设置]。

  3.在 [最大 CPU 使用] 方块中,设置该站点专用的 CPU 资源的百分比。

  4.选取 [强行限制]。

  当站点达到预先设置的限制时,它会采取已定义的动作,例如降低进程优先级、中止进程,或中止站点。请注意,如果位于一个受限制站点内的虚拟目录是设置为程序中或缓冲池型程序的应用程序,则该站点实际上可能会超过表面上的处理器使用限制。进程内及缓冲池型程序的应用程序不会受到处理器限制的影响,而且不会含在处理帐户记录的统计中。

  ·下列技术可协助您判定是否需要使用处理器限制︰记录「Processor︰% Processor Time」、「Web Service: Maximum CGI Requests」及「Web Service: Total CGI Requests」计数器;启用处理帐户记录,让「工作对象」计数器包含在 IIS 记录中;以及检查 Dllhost 对象计数器以判定进程外(out-of-process) WAM 及 ISAPI 请求的数目。

  您应注意作业限制有时会带来相反的结果。因为受限制的 Dllhost 进程是以较低的优先级执行,所以不会快速地响应来自Inetinfo 进程的请求。这会使得许多 I/O 线程受阻,于是降低了服务器的整体响应能力。如往常一样,只要做过任何一种改变之后,您都需要仔细地监视您的服务器在设置了启用作业限制之后,对性能带来哪些效果。

……

相关阅读