好好活,做有意义的事!

[转]Windows性能管理解析

上一篇 / 下一篇  2007-04-19 16:45:05 / 个人分类:性能测试

说到Windows环境下的性能管理,许多人首先想到的可能就是无处不在的Performance Monitor工具。早在Windows NT时代,Performance Monitor就是获取性能信息的主要工具,当然,任务管理器和Windows管理规范(Windows Management Instrumentation)也属于 常用工具之列,它们不仅能够提供性能数据,而且还能提供其他与性能有关的管理信息。本文介绍了一些充分发挥这些经典工具潜能的技巧,同时介绍了Windows XP新增的工具,探讨如何运用它们来评估系统的性能情况。
  一、什么是性能管理?

  对于许多管理员来说,Windows的性能管理不外乎打开控制面板→管理工具中的“性能”程序,即Performance Monitor程序,然后检查一下CPU利用率、磁盘忙闲状况、内存压力,而且通常只有在出现性能问题时才会去检查,例如服务器响应突然变慢,或者用户不能访问服务器。这种性能管理方式完全属于事后补救的方式,只起到了救火队员的作用,由于缺乏详尽、明确的事前评估、规划,算不上优秀的策略。要实现有效的性能管理,一定要在出现问题之前掌握系统的性能情况。

  只有事先采取有效的性能管理策略,才能全面掌握系统的性能特征,在此基础上,就可以估计何时可能出现性能问题以及问题的具体表现。预先收集的性能数据还可以用来规划未来的运算能力需求,例如,假设有一个IIS Web服务器,当并发用户数量是200时CPU的利用率是60%,据此可以推断系统负载何时达到极限,以及达到负载极限时能够支持的并发用户数量。另外,根据网站的增长情况,还可以估计出何时需要增添硬件设备。

  系统的整体性能由许多因素决定,例如CPU利用率,CPU队列长度(即,有多少任务正在等待CPU的服务),磁盘忙闲程度(即,磁盘驱动器有多少时间用于响应请求),可用的物理内存,网络接口的利用情况,等等,表一概括了最常用的性能计数器。

表一:重要的性能计数器

性能对象计数器提供的信息
MemoryAvailable BytesAvailable Bytes显示出当前空闲的物理内存总量。当这个数值变小时,Windows开始频繁地调用磁盘页面文件。如果这个数值很小,例如小于5 MB,系统会将大部分时间消耗在操作页面文件上。
Memory% Committed Bytes in Use% Committed Bytes In Use 是 Memory: Committed Bytes 与Memory: Commit Limit之间的比值。(Committed memory指如果需要写入磁盘时已在分页文件中保留空间的处于使用中的物理内存。Commit Limit是由分页文件的大小而决定的。如果扩大了分页文件,该比例就会减小)。这个计数器只显示当前百分比;而不是一个平均值。
MemoryPage Faults/secPage Faults/sec是指处理器处理错误页的综合速率。用错误页数/秒来计算。当处理器请求一个不在其工作集(在物理内存中的空间)内的代码或数据时出现的页错误。这个计数器包括硬错误(那些需要磁盘访问的)和软错误(在物理内存的其它地方找到的错误页)。许多处理器可以在有大量软错误的情况下继续操作。但是,硬错误可以导致明显的拖延。这个计数器显示用上两个实例中观察到的值之间的差除以实例间隔的持续时间所得的值。
Network InterfaceBytes Total/secBytes Total/sec是发送和接收字节的速率,包括帧字符在内。
Network InterfacePackets/secPackets/sec为发送和接收数据包的速率。
Physical Disk% Busy Time% Busy Time指磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。
Physical DiskAvg. Disk Queue LengthAvg. Disk Queue Length 指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。
Physical DiskCurrent Disk Queue LengthCurrent Disk Queue Length指在收集操作数据时在磁盘上未完成的请求的数目。它包括在快照内存时正在为其提供服务中的请求。这是一个即时长度而非一定间隔时间的平均值。多主轴磁盘设备可以一次有多个请求操作,但是其它同时发生的请求为等候服务。这个计数器可能会反映一个暂时的高或低的列队长度,但是如果在磁盘驱动器存在持续负载,可能值会总是很高。请求等待时间与这个列队的长度减去磁盘上的主轴成正比。这个差值应小于2才能保持良好的性能。
Processor% Processor Time% Processor Time指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在每个范例间隔中衡量处理器用于执行闲置处理线程的时间,并且用100%减去该值得出。(每个处理器有一个闲置线程,该线程在没有其它线程可以运行时消耗周期)。可将其视为范例间隔用于做有用工作的百分比。
Processor% User Time% User Time指用于用户模式的非闲置处理器时间的百分比(用户模式是为应用程序、环境分系统和整数分系统设计的有限处理模式。另一个模式为特权模式,它是为操作系统组件设计的并且允许直接访问硬件和所有内存。操作系统将应用程序线程转换成特权模式以访问操作系统服务)。这个计数值将平均忙时作为实例时间的一部分显示。
Server Work QueuesQueue LengthQueue Length指CPU当前的服务器作业队列长度。队列长度长时间超过四可能表示处理器堵塞。此值为即时计数,不是一段时间的平均值。
SystemProcessor Queue LengthProcessor Queue Length是指处理队列中的线程数。即使在有多个处理器的计算机上处理器时间也会有一个单队列。不象磁盘计数器,这个计数器仅计数就绪的线程,而不计数运行中的线程。如果处理器队列中总是有两个以上的线程通常表示处理器堵塞。这个计数器仅显示上一次观察的值;而不是一个平均值。
TCPSegments Retransmitted/secSegments Retransmitted/sec指程序段重新传输的速率,即传输的程序段中包含一个或多个以前传输过的字节。

二、定制性能监视器

  在Windows 2K/XP中,Performance Monitor仍是最常用的性能管理工具。当然,新版的工具不少地方已经改进,增添了不少功能。在Win 2K中,性能监视器以一个管理控制台(MMC)单元的形式实现。启动Win 2K/XP的性能监视器,可以看到类似图一的界面。

 

图一

  在Win XP中,性能监视器默认装入三个计数器:Pages/sec,Avg. Disk Queue Length,% Processor Time。这三个计数器无法直接删除,但一直留着又降低了监视器启动速度。如果要让监视器启动时不装入任何计数器,首先要清除\%systemroot%\system32目录下perfmon.msc文件的只读属性:进入命令窗口,转到system32目录,执行命令attrib r perfmon.msc。然后重新启动计数器,选中一个计数器,点击工具栏上黑色的“X”按钮即可删除一个计数器。选择菜单“文件”→“保存”,将更改后的管理控制台保存到磁盘。如果要将管理控制台执行标记成只读,只需在命令行上执行attrib +r perfmon.msc即可。

  在NT 4.0中,性能监视器包含一个实时图表,另外还有记录日志和报警功能,但在Win 2K和XP的中,这些功能分开了。在Win 2K/XP中,实时性能图表变成了“系统监视器”,系统监视器之下是日志和警报工具。系统监视器可以看作一个纯粹的实时性能数据察看工具,只能看,不能保存,点击工具栏上的“+”按钮可以添加新的性能计数器。性能日志和警报工具则具有操作历史数据的功能。

  如果要创建一个只有系统监视器、不带性能日志和警报工具的管理控制台,可按如下步骤操作:执行“MMC”命令,打开一个空白的MMC窗口,选择菜单“文件”→“添加/删除管理单元”,点击“添加”,选择“ActiveX控件”,再点击“添加”,在向导中选择System Monitor Control,确认即可。

三、性能日志和警报工具

  系统监视器只能简单地查看实时性能数据,如果需要长期的、持久化的性能数据,必须使用性能日志和警报工具。性能日志工具能够在一个日志文件中集中记录来自本地或远程的多个系统的性能数据,这些日志数据可以用系统监视器查看或用其他工具处理。扩展控制台中的“性能日志和警报”节点,可以看到它的三个分支:计数器日志,跟踪日志,警报。警报工具的功能很简单,就是当某个计数器的性能数据达到指定的值时,执行一定的动作,例如发送Email或用Net Send命令发送消息。下面我们主要讨论的是日志工具。

  为了说明如何使用计数器日志,我们要新建一个日志会话。右击“计数器日志”节点,选择“新建日志设置”,指定日志设置的名称,点击“确定”,出现图二的对话框,在这里设定要在日志中记录的计数器。

 

图二

  日志文件的默认保存路径是C:\perflogs目录,可以在对话框的“日志文件”页修改,但首先要设置待记录的对象和计数器才能转到“日志文件”页。点击“添加对象”按钮,将某个监视对象的所有计数器加入日志记录,或者点击“添加计数器”按钮加入单个计数器。无论选择哪种加入选项,监视目标(对象或计数器)都可以是本地的,也可以是远程机器的。

  如果要长期收集性能数据,最好调整一下采样间隔时间——特别地,如果要监视的计数器很多,而且来自不同的机器,如果采样间隔时间设置得太小,日志文件很快会变得很大。从每隔15分钟采样一次开始,试运行一段时间,看看日志文件变得多大了,然后再作相应的调整。

  如果要连接远程机器,可以在“运行方式”输入框提供登录远程机器的用户名字。

  收集性能监视数据需要一定的权限,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib注册子键控制着对性能监视数据的访问,性能监视数据正是通过该注册子键流到系统监视器之类的工具。用右键点击该注册子键,选择菜单“权限”,如图三,调整这里的权限分配也就调整了有权访问性能数据的用户。

 

图三

设置好要监视的对象和计数器之后,可以在“日志文件”页调整日志文件的格式,在“计划”页设置启动、停止日志的时间。如果设置成手工启动,启动方式是在MMC窗口中右击日志会话并选择“启动”。

  在“日志文件”页中,如图四,性能计数器日志除了默认的二进制.blg格式之外,还可以保存为其他多种格式,例如逗号分隔的文本文件(即CSV文件),甚至还可以保存到SQL Server表——这是Windows Server 2003和XP才有的功能。如果选择了SQL Server,还要指定一个SQL Server数据源和保存数据的表,虽然麻烦一点,不过如果要收集大量的性能数据并进行分析,SQL Server还是一种不错的选择。

 

图四

  启动日志之后,可以看到日志目录中生成了一个65 KB的日志文件。每次关闭和重新启动日志,都会生成一个新的日志文件,文件名字中的序号依次增加。Win XP和2K支持一项非常实用的功能,即使在性能监视器工具不运行的时候,也能继续将性能数据写入日志。如果是NT 4.0,则需要安装NT 4.0 Resource Kit的DataLog服务才能使用这个无人值守日志记录功能。Win 2K和XP本身就有Performance Logs and Alerts服务,该服务在日志会话启动时自动启动,日志会话结束时自动停止。

  Win 2K/XP性能日志的另一个改进之处是保存日志会话功能。在NT 4.0中,如果要为某个日志会话重新使用一组选定的性能对象和计数器,必须为每一台想要监视的服务器重新创建工作台文件,如果要将一组日志配置分别在多台服务器上本地运行,必须重复执行繁琐的配置操作。但在Win 2K/XP中,所有配置文件(包括日志和警报)都以HTML文件的形式保存,很容易修改和重用。要保存一个日志会话配置,只要在MMC窗口中右击会话,然后选择菜单“将设置另存为”即可。

  四、命令行工具

  XP提供了一个叫做Logman的新工具,它不仅能够在命令行上启动和停止日志会话,而且能够从命令行创建新的日志会话。

  例如,下面的第一Logman命令新建了一个iislogging会话,日志文件保存在默认c:\perflogs\IISLogging.blg,日志中加入了本地服务器上inetinfo.exe进程的Process\% Processor Time计数器,收集性能数据的时间间隔是15分钟。第二个命令启动了iislogging日志会话。运行这些命令之后,如果启动MMC性能监视工具,可以看到计数器日志中已经列出了刚才创建的日志会话。

logman create counter iislogging -c "\Process(inetinfo)\% Processor Time" -si 15:00logman start iislogging


用Logman的-s选项可以启动远程机器上的日志,使用形式类如“-s \\ServerName”。使用该选项时,Logman启动的日志将在远程服务器上运行,而不是执行Logman命令的本地机器。

  五、WMIC

  WMIC即Windows管理规范的命令行工具,在命令上执行执行wmic,即可启动WMIC环境。第一次执行wmic命令时,WMIC首先把自己安装到WMI名称空间。虽然微软推出WMIC的意图是简化WMI的使用,不过WMIC的命令行语法还是显得比较复杂。WMIC依靠别名来描述经常要访问的WMI类,例如,WMIC的别名pagefile相当于WMI查询Select * from Win32_PageFileUsage,如果在wmic提示符下输入pagefile命令,WMIC将显示出当前的页面文件使用情况。

  遗憾的是,WMIC没有为基于WMI的性能监视数据提供别名,所以要查询性能监视器数据,必须直接调用相应的WMI类。例如,如果要查看服务器当前的物理内存使用情况,可以在WMIC命令行上执行path win32_perfformatteddata_perfos_memory,该命令要求WMIC返回WMI类win32_perfformatteddata_perfos_memory的数据,输出结果包含了指定WMI内存对象的每一个属性。如果只想查看Available Bytes属性,可以将命令改为path win32_perfformatteddata_perfos_memory get AvailableBytes。

  另外,WMIC命令还可以从Windows命令行直接执行,例如,要查看Available Bytes,可以执行wmic path win32_perfformatteddata_perfos_memory get AvailableBytes命令,如果要返回多个属性值,只要依次列出各个属性,属性之间用逗号分隔,例如“AvailableBytes,AvailableMBytes,CacheBytes”。

  那么,如何获得各种性能监视器计数器的WMI类名称呢?最好的办法是使用WMI Tools(WMI Administrative Tools)。WMI Tools是微软提供的一个免费工具,可以从http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en下载,如图五所示,它能够清楚地显示出各个类的名称、属性、方法。

 

图五

  总而言之,在多层应用环境中,如果要查找性能瓶颈的具体位置,性能监视数据无疑是极其宝贵的依据,只要充分运用Win 2K/XP提供的性能工具,我们可以构造出功能丰富的性能管理系统。


TAG: 性能测试

 

评分:0

我来说两句

Open Toolbar