性能测试之Windows常见性能计数器

性能计数器(counter)是描述服务器或操做系统性能的一些数据指标。计数器在性能测试中发挥着“监控和分析”的关键做用,尤为是在分析系统的可扩展性、进行性能瓶颈的定位时,对计数器的取值的分析很是关键。但必须说明的是,单一的性能计数器只能体现系统性能的某一个方面,对性能测试结果的分析必须基于多个不一样的计数器。web

与性能计数器相关的另外一个术语是“资源利用率”。该术语指的是系统各类资源的使用情况。为了方便比较,通常用“资源的实际使用/总的资源可用量”造成资源利用率的数据,用以进行各类资源使用的比较。算法

性能测试以内存篇(windows)数据库

要监视内存不足的情况,请从如下的对象计数器开始:windows

· Memory\ Available Bytes缓存

· Memory\ Pages/sec服务器

Available Bytes剩余的可用物理内存,单位是兆字节(参考值:>=10%)。代表进程当前可以使用的内存字节数。Pages/sec 代表因为硬件页面错误而从磁盘取出的页面数,或因为页面错误而写入磁盘以释放[url=]工做[/url]集空间的页面数。网络

若是 Available Bytes 的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。若是 Pages/sec 的值为 20 或更大,那么您应该进一步研究页交换活动。Pages/sec 的值很大不必定代表内存有问题,而多是运行使用内存映射文件的程序所致。多线程

操做系统常常会利用磁盘交换的方式提升系统可用的内存量或是提升内存的使用效率。下列四个 指标直接反映了操做系统进行磁盘交换的频度。 Page Faults/sec 当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是 page Fault。若是这个页 位于内存的其余位置,这种错误称为软错误,用Transition Fault/sec 来衡量;若是这个页位于硬盘上,必须从硬盘从新读取,这个错误成为硬错误。硬错误会使系统的运行效率很快将下来。Page Faults/sec这个计数器就表示每秒钟处理的错误页数,包括硬错误和软错误。 Page Input/sec 表示为了解决硬错误而写入硬盘的页数(参考值:>=Page Reads/sec) Page Reads/sec 表示为了解决硬错误而从硬盘上读取的页数。(参考值: <=5) Pages/sec 表示为了解决硬错误而从硬盘上读取或写入硬盘的页数(参考值:00~20)app

必须同时监视 Available Bytes、Pages/sec 和 Paging File % Usage,以便肯定是否发生这种状况。若是正在读取非缓存内存映射文件,还应该查看缓存活动是否正常。函数

Cathe Bytes 文件系统的缓存(默认为50%的可用物理内存)

内存泄露

· Memory\Available Bytes

· Memory\ Committed Bytes

若是您怀疑有内存泄露,请监视 Memory\Available Bytes 和 Memory\ Committed Bytes,以观察内存行为,并监视你认为可能在泄露内存的进程的 Process\ Private Bytes、Process\ Working Set 和Process\ Handle Count。若是您怀疑是内核模式进程致使了泄露,则还应该监视 Memory\ Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。

private Bytes 进程没法与其余进程共享的字节数量。该计数器的值较大时,有多是内存泄露的信号

检查过于频繁的页交换

因为过多的页交换要使用大量的硬盘空间,所以有可能将致使将页交换内存不足,这容易与致使页交换的磁盘瓶颈混淆。所以,在研究内存不足不太明显的页交换的缘由时,您必须跟踪以下的磁盘使用状况计数器和内存计数器:

· Physical Disk\ % Disk Time

· Physical Disk\ Avg.Disk Queue Length

例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。若是页面读取操做速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。可是,若是队列长度增长的同时页面读取速率并未下降,则内存不足。

要肯定过多的页交换对磁盘活动的影响,请将 Physical Disk\ Avg.Disk sec/Transfer 和 Memory\ Pages/sec 计数器的值增大数倍。若是这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。若是长时间发生这种状况,那么您可能须要更多的内存。

研究程序的活动

接下来,检查正在运行的程序致使的过多的页交换。若是可能,请中止具备最高工做集值的程序,而后查看页交换速率是否有显著变化。若是您怀疑存在过多的页交换,请检查 Memory\ Pages/sec 计数器。该计数器显示因为页面不在物理内存中而须要从磁盘读取的页面数。(注意该计数器与 Page Faults/sec 的区别,后者只代表数据不能在内存的指定工做集中当即使用。)

性能测试之处理器篇(windows)

监视“处理器”和“系统”对象计数器能够提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。须要包含下列内容:

  • Processor\ % Total Processor Time 得到处理器总体使用状况。

该计数值用于体现服务器总体的处理器利用率,对多处理器的系统而言,该计数值体现的是全部CPU的平均利用率。若是该值的数值持续超过90%,则说明整个系统面临着处理器方面的瓶颈,须要经过增长处理器来提升性能。

要注意的是,因为操做系统自己的特性,在某些多CPU系统中,该数据自己并不大,但此时CPU之间的负载情况极不均衡,此时也应该视做系统产生了处理器方面的瓶颈。

  • 监视 Processor\ % Processor Time、Processor\ % User Time 和 % Privileged Time 以得到详细信息。

Processor\ % User Time是指系统的非核心操做消耗的CPU时间,若是该值较大,能够考虑是否经过优化算法等方法下降这个值。若是该服务器是数据库服务器,Processor\ % User Time大的缘由极可能是数据库的排序或是函数操做消耗了过多的CPU时间,此时能够考虑对数据库系统进行优化。

  • System\ Processor Queue Length 用于瓶颈检测。

%Total Processor Time 系统中全部处理器都处于繁忙状态的时间百分比,对于多处理器系统来讲,该值能够反映全部处理器的平均繁忙状态,该值为100%,若是有一半的处理器为繁忙状态,该值为50%
File Data Operations/sec 计算机对文件系统进行读取和写入操做的频率,可是不包括文件控制操做
Process Queue Length 线程在等待分配CPU资源所排队列的长度,此长度不包括正在占有CPU资源的线程。若是该队列的长度大于处理器个数+1,就表示处理器有可能处于阻塞状态(参考值:<=处理器个数+1)

%Processor Time CPU利用率,该计数器最为经常使用,能够查看处理器是否处于饱和状态,若是该值持续超过 95%,就表示当前系统的瓶颈为CPU,能够考虑增长一个处理器或更换一个性能更好的处理器。(参考值:<80%)
%Priviliaged Time CPU在特权模式下处理线程所花的时间百分比。通常的系统服务,进城管理,内存管理等一些由操做系统自行启动的进程属于这类
%User Time 与%Privileged Time计数器正好相反,指的是在用户状态模式下(即非特权模式)的操做所花的时间百分比。若是该值较大,能够考虑是否经过算法优化等方法下降这个值。若是该服务器是数据库服务器,致使此值较大的缘由极可能是数据库的排序或是函数操做消耗了过多的CPU时间,此时能够考虑对数据库系统进行优化。
%DPC Time 处理器在网络处理上消耗的时间,该值越低越好。在多处理器系统中,若是这个值大于50%而且%Processor Time很是高,加入一个网卡可能会提升性能。

观察处理器使用状况的值

要测量处理器的活动,请查看 Processor\ % Processor Time 计数器。该计数器显示处理器忙于执行非空闲线程所耗时间的百分比。

检查处理器使用时,请考虑计算机的角色和所完成[url=]工做[/url]的类型。根据计算机进行的工做,较高的处理器值意味着系统正有效地处理较重的工做负载或正在努力维持。例如,若是正在监视用户的计算机,而且该计算机用于计算,计算程序可能容易使用  100% 的处理器时间。即便这会形成该计算机中[url=]其余[/url]应用程序的性能受到影响,但能够经过改变负载来解决。

另外一方面,在处理许多客户请求的服务器计算机中,100% 左右的值表示这些过程在队列中,正在等待处理器时间,而且形成瓶颈。如此持续高层次的处理器使用对服务器而言是没法接受的。

考察处理器瓶颈

进程的线程所须要的处理器周期超出可用周期时,处理器瓶颈将逐步显示出来。能够创建较长的处理器队列,而且系统响应会受到影响。处理器瓶颈两种常见的缘由是 CPU 限制程序和产生过多中断的驱动程序或子系统组件。

要决定是否因为对处理器时间的要求较高而存在处理器瓶颈,请查看 System\ Processor Queue Length 计数器。队列中包含两个或更多的项目则代表存在瓶颈。若是多个程序进程竞争大多数处理器时间,安装更快速的处理器会提升吞吐量。若是正在运行多线程的进程,附加处理器会有所帮助,可是请注意,附加处理器可能只有有限的益处。

此外,跟踪计算机的服务器工做队列当前长度的 Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。

要决定中断活动是否形成瓶颈,请观察 Processor\ Interrupts/sec 计数器的值,该计数器测量来自输入/输出 (I/O) 设备的服务请求的速度。若是此计数器的值明显增长,而系统活动没有相应增长,则代表存在硬件问题。

也能够对生成中断的磁盘驱动器、网卡和其余设备活动的间接指示器监视 Processor\ % Interrupt Time 时间。

注意

要检测可能影响处理器性能的硬件问题,例如 IRQ 冲突,请观察 System\ File Control Bytes/second 的值。

监视多处理器系统

要观察多处理器计算机的效率,请使用下列附加计数器。

计数器

说明

Process\ % Processor Time

过程的全部线程在每一个处理器上的处理器时间总和。

Processor(_Total)\ % Processor Time

计算机中全部处理器的处理器活动的度量。 "N[{y8_0此计数器采样间隔期间的全部处理器平均非空闲时间的总和,并用处理器数目除以该和。51Testing软件测试网
t#e_5I:N2y8@"a:X:Y 例如,若是全部处理器平均忙半个采样间隔,则显示 50%。若是半数处理器忙整个间隔,而其余的处理器空闲,则也显示 50%。

Thread\ % Processor Time

线程的处理器时间数

性能测试之磁盘篇(windows)

监测对象:PhysicalDisk 若是分析的计数器指标来自于数据库服务器、文件服务器或是流媒体服务器,磁盘I/O对这些系统来讲更容易成为瓶颈。

每磁盘的I/O数可用来与磁盘的I/O能力进行对比,若是通过计算获得的每磁盘I/O数超过了磁盘标称的I/O能力,则说明确实存在磁盘的性能瓶颈。

下表给出了每磁盘I/O的计算公式:

RAID类型

计算方法

RAID0

(Reads+Writes)/Number of Disks

RAID1

(Reads+2*Writes)/2

RAID5

[Reads+(4*Writes)]/Number of Disks

RAID10

[Reads+(2*Writes)]/Number of Disks

%Disk Time 表示磁盘驱动器为读取或写入请求提供服务所用的时间百分比,若是只有%Disk Time比较大,硬盘有多是瓶颈
Average Disk Queue Length 表示磁盘读取和写入请求提供服务所用的时间百分比,能够经过增长磁盘构造磁盘阵列来提升性能(<=磁盘数的2倍)
Average Disk Read Queue Length 表示磁盘读取请求的平均数
Average Disk write Queue Length 表示磁盘写入请求的平均数
Average Disk sec/Read 磁盘中读取数据的平均时间,单位是s

Disk Bytes/sec 提供磁盘系统的吞吐率。 决定工做负载的平衡 要平衡网络服务器上的负载,须要了解服务器磁盘驱动器的繁忙程度。使用 Physical Disk\ % Disk Time 计数器,该计数器显示驱动器活动时间的百分比。若是 % Disk Time 较高(超过 90%),请检查 Physical Disk\ Current Disk Queue Length 计数器以查看正在等待磁盘访问的系统请求数量。等待 I/O 请求的数量应当保持在不大于组成物理磁盘的主轴数的 1.5 到 2 倍。
Average Disk sec/Transfer 磁盘中写入数据的平均时间,单位是s

计数器反映磁盘完成请求所用的时间。较高的值代表磁盘控制器因为失败而不断重试该磁盘。这些故障会增长平均磁盘传送时间。通常来讲,定义该值小于15ms最为优异,介于15-30ms之间为良好,30-60ms之间为能够接受,超过60ms则须要考虑更换硬盘或硬盘的RAID方式了

 

Average Disk Bytes/Transfer

值大于 20 KB 表示该磁盘驱动器一般运行良好;若是应用程序正在访问磁盘,则会产生较低的值。例如,随机访问磁盘的应用程序会增长平均 Disk sec/Transfer 时间,由于随机传送须要增长搜索时间。

性能测试之网络篇(windows)

监测对象:Network Interface 网络分析是一件[url=]技术[/url]含量很高的[url=]工做[/url],在通常的组织中都有专门的网络管理人员进行网络分析,对测试工程师来讲,若是怀疑网络是系统的瓶颈,能够要求网络仍有来写真进行网络方面的检测。

Network Interface\Bytes Total/sec为发送和接收字节的速率(包括帧字符在内)。能够经过该计数器的值判断网络链接速度是不是瓶颈,具体操做方法是用该计数器的值与目前的网络带宽进行比较。

 

Byte Total/sec 表示网络中接受和发送字节的速度,能够用该计数器来判断网络是否存在瓶颈(参考值:该计数器和网络带宽相除,<50%)

性能测试之进程篇(windows)

查看进程的%Processor Time值

每一个进程的%Processor Time反映进程所消耗的处理器时间。用不一样进程所消耗的处理器时间进行对比,能够很容易的看出具体是哪一个进程在[url=]性能测试[/url]过程当中消耗了最多的处理器时间,从而能够据此针对应用进行优化。

查看每一个进程产生的页面失效

能够用每一个进程产生的页面失效(经过Process\Page Failures/sec计数器得到)和系统的页面失效(可经过Memory\Page Failures/sec计数器得到)的比值,来判断哪一个进程产生了最多的失效页面,这个进程要么是须要大量内存的进程,要么是很是活跃的进程,能够对其进行中的分析。

了解进程的Process\Private Bytes

Process\Private Bytes是指进程所分配的没法与其余进程共享的当前字节数量。该计数器主要用拉判断进程在性能测试过程当中有无内存泄漏。

例如:对于一个IIS之上的web应用,咱们能够重点监控inetinfo进程的Private Bytes,若是在性能测试过程当中,该进程的Private Bytes计数器值不断增长,或是性能测试中止后一段时间,该进程的Private Bytes仍然持续在高水平,则说明应用存在内存泄漏。

(备注:进程分析方法用到的计数器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)

相关连接: ① 内存映射文件机制 内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此以后进程操做文件,就像操做进程空间里的地址同样了,省去了读和写I/O的时间。

好比使用memcpy等内存操做的函数。这种方法可以很好的应用在须要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比普通IO效率要高。

利用内存映射文件您能够认为操做系统已经为您把文件所有装入了内存,而后您只要移动文件指针进行读写便可了。这样您甚至不须要调用那些分配、释放内存块和文件输入/输出的API函数,另外您能够把这用做不一样的进程之间共享数据的一种办法。运用内存映射文件实际上没有涉及实际的文件操做,它更象为每一个进程保留一个看得见的内存空间。至于把内存映射文件当成进程间共享数据的办法来用,则要加倍当心,由于您不得不处理数据的同步问题,不然您的应用程序也许极可能获得过期或错误的数据甚至崩溃。

内存映射文件自己仍是有一些局限性的,譬如一旦您生成了一个内存映射文件,那么您在那个会话期间是不可以改变它的大小的。因此内存映射文件对于只读文件和不会影响其大小的文件操做是很是有用的。固然这并不意味着对于会引发改变其大小的文件操做就必定不能用内存影射文件的方法,您能够事先估计操做后的文件的可能大小,而后生成这么大小一块的内存映射文件,而后文件的长度就能够增加到这么一个大小。咱们的解释够多的了,接下来咱们就看看实现的细节:

    • 调用CreateFile打开您想要映射的文件。
    • 调用CreateFileMapping,其中要求传入先前CreateFile返回的句柄,该函数生成一个创建在CreateFile函数建立的文件对象基础上的内存映射对象。
    • 调用MapViewOfFile函数映射整个文件的一个区域或者整个文件到内存。该函数返回指向映射到内存的第一个字节的指针。
    • 用该指针来读写文件。
    • 调用UnmapViewOfFile来解除文件映射。
    • 调用CloseHandle来关闭内存映射文件。注意必须传入内存映射文件的句柄。
    • 调用CloseHandle来关闭文件。注意必须传入由CreateFile建立的文件的句柄。
相关文章
相关标签/搜索