|
(附录1)
附录 1:性能设置
您可以调整 iis metabase 内容及注册表设置来调整 web 服务器的性能。如果打算改变注册表,则除非没有其它方法可用,否则请勿使用注册表编辑器。注册表编辑器会忽略系统管理工具提供的标准安全设置。这些安全设置可防止您输入冲突的设置值,或可能降低性能或损害系统的设置值。直接编辑注册表会导致严重且难以预计的后果,会导致系统无法启动,而必须重新安装 windows 2000。使用 adsutil 公用程序 (可在 inetpub\adminscripts 目录中找到) 来改变 iis 也会发生同样的状况。若要设置或定制 windows 2000 及 iis 5.0,请尽量使用 [控制面板] 或 microsoft management console (mmc)。
metabase 设置
这份清单包括用来调整 web 服务器最重要的 metabse 设置。使用 adsi 接口可以获取及改变它们。这些设置大多会在重新启动 web 服务之后才生效。相关信息,请参阅说明 iisreset 公用程序的小节。
appallowdebugging-这个属性会指定服务器上是否启用了 asp 侦错。如果启用,则iis 应用程序线程将序列化,这表示每个应用程序一次只能执行一条线程。这会对 web 服务器的性能产生不利的影响。您可以在所有生产服务器上将这个属性设为 false (默认)。
aspallowsessionstate-默认值是 true。将它调整为 false 可产生更高的性能。一旦改变后,开发人员必须明确地在需要使用「有效期」对象的页面上置换这个设置。若要改变单一页面上的默认设置,开发人员可以使用页面顶端的<% @enablesessionstate=false %>。若要改变这个选项,请务必通知开发人员。
aspbufferingon-默认值是 true。这个属性的默认行为是允许所有来自应用程序的输出在缓冲区被转存到客户端浏览器之前,先收集在缓冲区中。如果这个属性被设置为 false,则来自 asp 脚本文件的输出会在客户端使用浏览器时,写入该客户端浏览器。您必须确定这个属性在所有生产环境 web 服务器上都设置为 true。详细信息,请参阅本文中的〈调整及疑难排除的建议〉小节。
aspthreadgateenabled (默认值是 false) 及 aspprocessorthreadmax (默认值是 25)- 当您将 aspthreadgateenabled 设为 true 时,便会启用线程传送,而且 iis 5.0 会动态地改变工作线程的数目,以响应改变的工作量。iis 允许每一个 asp 进程拥有的最大工作线程数目是 aspprocessorthreadmax乘以您服务器上的 cpu 数目。请调低此值,并监视性能。如果性能降低,请调回 aspprocessorthreadmax 值。相关信息,请参阅本文中的〈线程传送〉小节。
asprequestqueuemax-在 iis 5.0 中,队列中的默认请求限制已增加到 3,000个。这个设置的作用会根据应用程序的行为而定。如果请求的执行时间很短,而且在队列中的时间将很短,则增加此限制是合理的作法。
aspqueueconnectiontesttime-这是 iis 5.0 的新设置,对于 web 应用程序的性能帮助很大。在 iis 4.0 中,一个请求是当它从队列中删除时无条件地开始执行。在 iis 5.0 中,如果有个请求在队列中存留的时间超过队列连接测试时间,则服务器在开始执行之前,会先检查该客户端是否仍在连接中。这个功能可以处理不耐久候的用户在同一页上多次尝试而用满请求队列的问题。默认值是 3 秒。根据您的服务器正在执行的 web 服务器类型,决定是否改变这个值。执行时间很长的 asp 页也会使用 response.isclientconnected 方法来检查客户端是否仍在等待页面的剩余部份。执行时间很长的页面应谨慎地使用 response.flush,以确定用户能知道该页仍在执行中,而且正在执行生产性的工作。「响应」对象方法的相关信息,请参阅 iis 5.0 联机文档。
aspsessionmax 及 aspsessiontimeout-其默认行为是将单一有效期的长度限制为 20 分钟,而不限制并行有效期的数目。在利用有效期的应用程序上缩小「有效期等候超时」以减少服务器所需的负担时要特别小心,但是如果并行有效期增加到难以处理的比例,就会产生增加「有效期最大值」的需要。
aspscriptenginecachemax-在内存中缓存的脚本文件引擎之最大数目的新默认值是 125。这不包含目前执行的脚本文件引擎。请根据应用程序中的内容类型调整此值。如果有几千个不同的页面,则增加缓存大小可能会有些效果,因为最常请求的网页可以随时供人存取。存取脚本文件引擎可以免去将模板重新编译为字节程序代码。
在设置这个 metabase 属性之前,您应了解 asp 使用「asp script engine cache」及「asp template cache」的方法。进一步讨论,请参阅〈附录 3:asp 缓存〉。
aspscriptfilecachesize-这个属性会指定要存放在「asp template cache」中预先编译的脚本文件个数。如果是 0,则不会有任何脚本文件可缓存。若是 -1,则所有请求的脚本文件都会被缓存。默认值是 250 个。如果您有许多不同的 asp 页,请增加此值。请勿将此属性的值设为 0。这会关闭所有 asp 缓存,并严重地损害服务器的性能。
asptrackthreadingmodel-这个 metabase 属性会指定 iis 是否将检查您的应用程序瞬间产生之任一组件的线程处理模式。如果让这个 metabase 属性保持它的默认值 (false),则可避免由于追踪 asp 的线程处理模式所造成的负担,而您可以在您的 asp 应用程序中看见性能的提升。不过,如果这个属性是设为 false,则您打算设置「应用程序」范围而建立的任何组件,必须聚集为不用线程处理的 marsaller。如果没有聚集 marshaller,则当您尝试瞬间产生该组件时,asp 就会产生错误。此外,如果这个属性是 false,则缺少 onstartpage 或 onendpage 方法且瞬间在您 asp 应用程序中产生的所有对象,会在该释放的时间前释放。这应该可以提高应用程序的可扩展性。这个属性在 iis 4.0 中的默认值是 true。相关信息,请参阅 iis 5.0 联机文档。
cacheisapi-这个属性显示 isapi 扩展 在使用之后是否会缓存在内存中。如果这个属性的值是 true,则 .dll 文件会留在缓存中,直到服务器停止为止。如果此值为 false,则一旦不再使用该 .dll 文件,便会从内存中卸载它。是否会缓存 isapi 扩展,是依据将它们加载内存供使用时其属性值而定。因此,如果这个属性在扩展已经被加载且缓存之后才改变,则此改变对该扩展不会有影响。 将这个属性设为 false 会对侦错有帮助,但请确定这个属性在所有生产 web 服务器上都设为 true。为每一个请求重新加载 isapi extension .dll 文件,不但相当昂贵而且会降低性能。
connectiontimeout-这个属性会指定服务器在中断一条非使用中的连接之前,将等待的秒数。默认值是 900 (15 分钟)。因为开启的连接会降低性能,所以请考虑降低此值,并监视您的服务器在改变之后会有什么效果。
maxendpointconnections-这个属性会指定「听取」通讯端的最大数目,该通讯端会聚集在网络端点上。例如,如果将此值设为 15,则单一连接点可以建立最多 15 条连接,即使连接到此连接点的域超过一个。这个属性值的下限及 serverlistenbacklog 属性的值,决定了在您的服务器上聚合的通讯端数目。请将它设成高数字,并监视性能。默认值是 100 个。
serverlistenbacklog-这个属性会指定可以由队列处理的额外通讯端数目。这个属性值的下限及 maxendpointconnections 属性值,决定了在您的服务器上聚合的通讯端数目。请将它设成高数字,并监视性能。默认值是根据acceptex 操作系统参数及指定在 serversize metabase 内容中的服务器大小而定。如果将 serversize 设为 1,则这个属性的默认值是 40。如果将 serversize 设为 2,则这个属性的默认值是 100。这个属性的有效值范围是 5 到 1000。
serversize-这个属性会从每天处理的客户端请求数目观点来指定服务器的规模。值 0 表示一个预计每日接收少于 10,000 个请求的小型网站;值 1 表示每日处理10,000 到 100,000 个请求的中型网站;值 2 则指定一天处理超过 100,000 个请求的大型站点。由于默认值为 1,所以若想最大化您的服务器可以处理的请求数目,请将这个属性设为 2。您可以使用 ui 来调整此设置。请开启您站点的内容表,并选取 [性能] 选项卡后,将 [性能调整] 滑动杆调整为[100,000 以上]。
注册表设置
本节列出当您在调整web服务器时,应该特别注意的注册表设置。其中包括设置的注册表路径 (存放在同一位置上),以及设置的名称、范围、默认值及每一个设置的作用说明。您必须在您的服务器上重新启动网络服务,才能使新的 inetinfo 设置生效。相关信息,请参阅本文中的〈iisreset 公用程序〉小节。
registry path: hkey_local_machine\system \currentcontrolset \services \inetinfo \parameters
disablememorycache reg_dword 范围: 0, 1默认:0
请确定此参数在所有生产服务器上全都设为 0。如果将此参数设为 1,则会停用缓存。虽然在侦错时停用缓存是很有用的,但却会严重损害生产服务器的性能。这个参数无法通过 iis 管理单元设置。
listenbacklog reg_dword 范围: 1 到 300默认:15
这个参数会指定在一个队列中,等待服务器处理的最大使用中连接数目。增强的 iis 功能通常会免去使用或修改这个项目的需要,但是如果遇到超大量的使用率,则你可以将此值调整到 300。
maxpoolthreads reg_dword 范围: 0 - 无限制默认:4
这个参数会指定每一个处理器要建立的缓冲池线程数目。一条缓冲池线程会看守一个网络请求并处理它。maxpoolthreads 计数不包括 isapi 应用程序使用的线程。在默认情况下,只有 4 个 cgi 应用程序可以同时执行。如果执行很多个 cgi 应用程序,则必须增加此值才能提高生产力。您可以将 usepoolthreadforcgi 值 (在 ..\services\w3svc\parameters 下)设为 false (0);但是因为它在 cgi 应用程序高用量期间会明显地降低性能,所以有点危险。一般来说,最好不要为每一个处理器设置超过 20 条线程。
maxcachedfilesize reg_dword 范围: 0 - 无限制 (以字节测量)默认:262,144 字节 (256kb),如果注册表中没有值的话。 这个参数会决定能放在缓存中的最大文件大小。iis 不会缓存大于 maxcachedfilesize 字节的文件。如果您正在执行大型的专用 web 服务器,则可以将此值添加到注册表,以增加缓存可以保留的文件大小。
memcachesize reg_dword 范围: 0 mb - 总计 mb 的可用 ram默认:50% 的可用内存,如果注册表中没有值的话 这个参数会指定 iis 将用于其本身文件缓存的最大内存容量。如果 iis 不需要这么多内存,则剩余的内存可供其它应用程序使用。如果注册表中没有此值,则 iis 最多只会使用到 web 服务器上可用内存的一半(此容量是每 60 秒动态计算一次)。如果您正在执行大型的专用 web 服务器,则可以将此值添加到注册表,并增加 iis可以使用的内存容量。将此对象添加到注册表时,必须以 mb 为单位指定大小。
objectcachettl reg_dword 范围: 0 - 无限制默认: 30 秒 这个参数会控制「存留时间」(ttl) 设置,其定义了对象 (包括文件) 保留在高速缓存中的时间长度。如果内存缓存中有个对象经过一段定义的时间之后,都没有被引用,则该对象会从缓存中被清出。这个值默认并不包括在注册表中。如果想要改变它,则必须手动添加。如果系统内存有限,或服务器的内容是动态的,则可使用较低的 ttl 来防止系统内存被用于缓存大量的短暂对象。将此值设为 0xffffffff 会停用对象缓存回收程序,并让缓存的对象保留在缓存中,直到被覆盖为止。如果您的服务器有充足的系统内存,而且您的资料大多是静态的,则停用缓存回收程序会很有用。
poolthreadlimit reg_dword 范围: 0 - 无限制默认: 2 * # mb 这个参数指定可以在系统中建立的最大缓冲池线程数目。一条缓冲池线程会看守一个网络请求并处理它。poolthreadlimit 是包括所有 iis 线程的硬件限制。poolthreadlimit 恒大于或等于 maxpoolthreads。
registry path: hkey_local_machine\system \currentcontrolset \control \securityproviders \schannel
servercachetime reg_dword 范围: 0 - 无限制 (以毫秒测量)默认: 300,000 毫秒 (5 分钟) 这个参数会决定一个 ssl 有效期持续的时间量。一旦建立一个 ssl 有效期,客户端要重新连接到此有效期只需花费初始连接来源成本的一小部份。如果 ssl 有效期到期,则必须完整建立一个新的 ssl 有效期。这个参数默认不存在。若要改变它的行为,必须将它添加到注册表。您必须评估您预计 ssl 有效期持续的时间,然后将此参数设为较长一些。不要将超时时间设置得远大于预计时间,否则这个缓存会开始储存旧资料。如需进一步讨论,请参阅本文中的〈安全性〉小节。
(附录2)
附录 2:windows 2000 web server 性能最佳化的技巧
· 升级 windows 2000 之前,您必须先卸除 inoculan、pcanywhere 及 veritas 的安装。您可以在安装 windows 2000 之后再次安装它们。
· 请以新的默认中度保护模式 (缓冲池的 out-of-process) 执行您大部分的应用程序。当应用程序在缓冲池时,它们会共享相同的程序,因此降低了内存的负担。而且在中度保护下执行比在低保护 (in-process) 下执行应用程序会有更大的可靠性。
· 检查「事件记录文件」,以寻找在本机及远程服务器上是否有大量的服务重新启动情形。如果应用程序经常失败,性能将非常差,但因为 iisreset 公用程序会自动地执行可靠的重新启动,所以您可能不会察觉失败。
· 按时在您的服务器上执行磁盘整理。经过一段时间后,在服务器上的文件及目录会变得破碎。当这种情况发生时,因为需要许多额外的磁盘读取来搜集各个片段,所以 windows 需要花较长的时间来存取文件及目录。关于「windows 2000 磁盘整理工具」的信息,请参阅 windows 2000 联机文档。
· 如果您使用 ssl,请确定已启用 license logging service,即使匿名用户正在存取您的 web 服务器也一样。
· 不要例行或定期地重新启动 iis 服务器,而应使用 iisreset.exe 公用程序。服务器重新开机应该是不得已而为之的手段。而且一旦发现任何蓝屏错误都应该向 pss 报告并解决,不要忽略不管。
· 使用下列方法之一将 iis 4.0 升级到 iis 5.0︰
轮流升级︰在将整群服务器升级之前先测试升级一台服务器,然后再升级其它计算机。
系统化的升级︰先建立一组 iis 4.0 测试,然后在升级到 iis 5.0 之前先在您的计算机上执行测试。升级到 iis 5.0 之后再执行一次测试,并测量旧系统与新系统间的性能差异。
· 可能的话,使用自动安装脚本文件来简化升级。
· 如果您使用 visual basic 对象,您在 apartment 线程处理的应用程序或使用通用领域的同步呼叫上,将看不见性能提升。
· 在 windows 2000 及 iis 5.0 中使用 index server 3.0 必须对注册表作部份改变。相关信息,请参阅 windows 2000 联机文档。
· 如果您在 windows nt 4.0 上使用磁盘映像,请确定执行下列事项︰
在升级前先备份,在升级到 windows 2000 时保持 windows nt 4.0 的镜像原封不动。如此可以让您保有以前的磁盘映像。
确定您的磁盘驱动器是动态的。windows 2000 需要这样做。在将磁盘驱动器转换成动态之前,磁盘末端必须有大约 1mb 的可用空间。因为磁盘整理时可能会需要它。相关信息,请参阅 knowledge base 文件。q197738 not enough space available to upgrade to a dynamic disk。
为了建立新镜像,在升级到 windows 2000 之前请先重新规划分割区的大小。
请参阅这些额外的 knowledge base 文章︰q175761 dynamic vs. basic storage in windows 2000 及q231376 legacy ft sets regenerate during a windows 2000 upgrade。
· 阅读本文中〈资源〉小段中所列的文件。
(附录3)
使用 iis 5.0 调整 web服务器的艺术与科学(附录3)
「asp template cache」储存模板︰纯文字格式的预先编译 asp 页 (已经演算 #includes等等)。它的大小是由在 metabase 中的 aspscriptfilecachesize 设置所控制,默认值为 250。「asp script engine cache」会保留已经被编译成字节程序代码的 asp 模板。它的大小是由在 metabase 中的 aspscriptenginecachemax 设置所控制,默认值为 125。两者间的关系是︰asp 页会在模板缓存处理中被缓存一次,但如果它在许多线程上同时被执行,它可以在 script 引擎缓存处理中出现多次。一个拥有许多内存及经常接到存取次数的个别 asp 页的站点可能需要增加 aspscriptfilecachesize (使用「系统监视程序」监视 asp 计数器来诊断)。增加 aspscriptenginecachemax 的需求则小得多;主要原因是默认值对于有 8 个或以上处理器的机器而言不适用。aspscriptenginecachemax 的 metabase 值应等于或大于 cpu 的数量再加上 1,再乘上 aspprocessorthreadmax。aspprocessorthreadmax 默认值为 25。
每个主控 asp 的处理会拥有其本身的「asp 模板」及「script 引擎缓存处理」。因为 asp 应用程序在缓冲池的 dllhost 处理中会以中度隔离方式执行,所以默认只有一个进程。
当 asp 接收到页请求时,它会先检查「asp 模板缓存处理」。如果有该页缓存的例项时,请求会被转发到「script 引擎缓存处理」。如果请求的页不在「模板缓存处理」中,则它会被编译成模板,并转发到「asp script 引擎缓存处理」。如果页例项在「script 引擎缓存」中缓存,并准备执行,则该引擎会执行。如果没有,但有一个已经在执行中的页例项,则 asp 会复制该执行中引擎并执行该复制。如此可以节省重新将模板分析为字节程序代码的成本。如果没有与页面相关的 script 引擎,asp 会从「asp 模板缓存处理」使用预先编译的模板、建立新 script 引擎,并使它将模板编译成字节程序代码后执行。当页面结束执行时,script 引擎会被放在可用清单的最前面。如果可用清单增加到大于 aspscriptenginecachemax,则最久未被使用的 script 会被删除。在 script 引擎缓存处理中的一次存取,表示 asp 可以避免重新将模板编译成字节程序代码。
关于在本讨论中所提的 metabase 设置的相关信息,请参阅<附录 2︰性能设置>。
使用 iis 5.0 调整 web服务器的艺术与科学(附录4)
一般信息
· killelea, patrick。web 性能调整。cambridge, massachusetts: o'reilly & associates, 1998。内容也可以在下列网站获得 http://www.patrick.net。
· microsoft corporation (编辑器)。microsoft windows 2000 server resource kit、microsoft internet information services 5.0 资源指引 。redmond, washington: microsoft press, 2000.. 特别是参阅〈capacity planning〉及〈monitoring and tuning your server〉两节。
· 使用 microsoft windows dna 平台配置网站的蓝图,网址是http://msdn.microsoft.com/msdn-online/start/features/dnablueprint.asp 。
· microsoft site server 3.0 容量及性能资源清单在下列网址可找到 http://www.microsoft.com/siteserver/ssrk/rk_list_all_capperf.htm。
· internet 交易的容量模式 ,位于http://www.microsoft.com/siteserver/ssrk/docs/rk_tca.doc。
· iis 的 microsoft technet 站点位于http://www.microsoft.com/technet/iis/default.asp。
硬件调整
· 测量网站的硬件性能,kathy ferguson 所著,位于http://www.microsoft.com/technet/iis/meashd.htm。
· 计数器快速指引,由 kathy ferguson 所著,位于http://www.microsoft.com/technet/iis/qguide.asp。
工具
· web 应用程序重点工具及其使用说明,可到http://webtool.rte.microsoft.com/default.htm 取得。 · 大部分在文件中讨论的工具可以在 windows 2000 resource kit cd 上获得,或已内建到操作系统中。关于后者的信息,请参阅 windows 2000 联机文档。
windows 2000 及 iis 性能及调整
· 如何使用 internet information server 5.0 及 windows 2000 来设置可靠的 web 服务器,位于http://www.microsoft.com/servad/events/fall/tnq20005/html/default.htm。
· 监视及最佳化 internet information server,位于http://www.microsoft.com/technet/iis/c06.asp。
· 调整 internet information server 性能,作者:mike moore ,位于http://www.microsoft.com/isn/whitepapers/tuningiis.asp。
· windows 2000 性能及基准 (在报告及白皮书标题下,位于http://www.microsoft.com/windows2000/guide/platform/performance/default.asp。
· 性能推进器︰调整后的 windows 2000 iis"磐石",frank j. ohlhorst 及 john yacono 合著, 位于http://www.crn.com/supersite/reviews/reviews.asp?rsid=crn&articleid=12731。
· 浏览 web 服务器性能最佳化设置的途径,todd c. wanke 所著,位于http://www.microsoft.com/backstage/whitepaper.htm。
· iis 4.0 调整参数以达成高容量站点,michael stephenson 所著,位于http://msdn.microsoft.com/workshop/server/feature/tune.asp。
测试及调整 web 应用程序
· 提升性能与样式的 15 个 asp 技巧,位于http://msdn.microsoft.com/workshop/server/asp/asptips.asp。
· homer、 alex 及其它。professional active server pages 3.0. london: wrox press, 1999. 特别是使 asp 性能最佳化的章节。
· 严重的性能及缩放性杀手,george reilly 所著,位于http://msdn.microsoft.com/workshop/server/iis/tencom.asp。
· asp 的最佳作法,george reilly 所著,位于http://support.microsoft.com/support/activeserver/aspbestpractices.ppt。
· 最佳化您的 active server pages 性能,nancy winnick cluts 所著,位于http://msdn.microsoft.com/workshop/server/asp/maxperf.asp。
· 已取得任何缓存了吗? nancy winnick cluts 所著,位于http://msdn.microsoft.com/workshop/server/feature/cache.asp。
· 提升 asp 应用程序性能的技巧,srinivasa sivakumar 所著,位于http://www.15seconds.com/issue/000106.htm。
· 测量您的 asp script 的执行时间,mike shaffer 所著,位于http://www.4guysfromrolla.com/webtech/122799-1.shtml。
· 测试您的 web 应用程序的性能,matt odhner 所著,位于http://www.microsoft.com/technet/iis/wastip.asp。
· 增进 mdac 应用程序的性能,suresh kannan 所著,位于http://www.microsoft.com/data/impperf.htm。
安全性议题
· microsoft internet information server 4.0 安全性检查清单,位于http://www.microsoft.com/security/default.asp。
· 网络攻击的安全性考虑,位于http://www.microsoft.com/technet/security/dosrv.asp。
|