性能监控 常规计数器信息
我们在做性能测试的时候要监控windows和LINUX的系统资源。
以下是我整理收集的一部分内容, 供大家参考学习。
内存相关:
Object( 对象) |
Counters |
Description( 描述) |
参考值 |
Memory |
Available MBytes |
物理内存的可用数( 单位 Mbytes)。 |
至少要有10%-20% 的物理内存,主要根据物理内存的大小去衡量 |
Memory |
Page/sec Page Faults/sec Pages utput/sec Pages Input/sec Page Reads/sec Transition Faults/sec
|
Pages Input/sec 是为了解决硬错误页,从硬盘上读取的页数,而Page Reads/sec 是为了解决硬错误,从硬盘读取的次数。如果 Page Reads/Sec 比率持续保持为 5,表示可能内存不足。 Page Faults/sec 是指处理器中“页面错误”的数量。当一个进程引用不在主存储器“工作集” 中的虚拟内存页时,就会发生页面错误。如果该页面在 Standby 列表上,因而已在主存储器中,或者如果另一个与其共享该页面的进程正在使用该页,那么发生“页面错误”时,不会从磁盘读取该页面。 Pages Input/sec 是指内存引用时页面不在内存,为解决这种情况而从磁盘读取的页面数量。此计数器包含页面流量,它代表为应用程序访问文件数据分配的系统缓存。如果您担心过 量的内存压力(即系统颠簸)以及可能造成的过量调页,那么这是个需要查看的重要计数器。 Pages Output/sec 是指因主存储器中的页面已修改而写入磁盘的页面数量。 Pages/sec 是指引用不在内存中的页面时,为解决这一问题,从磁盘读取或写入到磁盘的页面数量。它是 Pages Input/sec 与 Pages Output/sec 之和。当处理器向内存指定的位置请求一页(可能是数据或代码)出现错误时,这就构成一个Page Fault。如果该页在内存的其他位 置,该错误被称为软错误(用Transition Fault/sec 计数器衡量);如果该页必须从硬盘上重新读取时,被称为硬错误。许多处理器可以在有大量软错误的情况下继续操作。但是,硬错误可以导致明显的拖延。 |
Page/sec 推荐00-20( 如果服务器没有足够的内存处理其工作负荷, 此数值将一直很高。如果大于80,表示有问题)。这些计数器的值比较低, 说明Web服务器响应请求比较快, 否则可能是服务器系统内存短缺引起( 也可能是缓存太大, 导致系统内存太少)。Page Input/sec 的值可以衡量出硬错误页发生的速率, 通常它的值会于或者等于Page Reads/sec。 |
Memory |
Cache Bytes |
文件系统缓存(File System Cache) |
默认情况下认情况下为50%的可用物理内存。需要关注该计数器的趋势变化 |
Internet File Cache Hits % |
|
File Cache Hits %是文件缓存命中全部( 对于一个Information File Cache 缓存需求的比例, 反映了IIS 的文件缓大部分是静Services Flushes 存设置的工作情况。而File Cache Hits 态网页组成 Global File Cache Hits 是文件缓存命中的具体值,File Cache 的网站)File Flushes 是自服务器启动之后文件缓存Cache Hits% 刷新次数, 如果刷新太慢, 会浪费内存; 如果刷新太快, 缓存中的对象会太频繁的丢弃生成, 起不到缓存的作用。通过File Cache Hits 和File Cache Flushes 可以得到一个适当的刷新值( 参考IIS 的设置ObjectTTL 、MemCacheSize 、MaxCacheFileSize) |
|
|
|
|
|
Memory |
PoolPaged BytesPool Nonpaged Bytes |
Pool Paged Bytes Pool Nonpaged Bytes 这两个计数器监视服务器上各个进程的分页池字节数和非分页池字节数。 |
在访问数比较固定的情况下, Pool Nonpaged Bytes 是比较定的, 如果访问数逐步增加, 该值会缓慢的增加 |
Process |
Virtual Bytes Working Set 计数器 |
Virtual Bytes( 实Virtual Bytes 数器监视IIS保留的例inetinfo 、虚地址空间的数量, 实例化为inetinfo dllhost) Working Set( 实例进程(IIS 运行的核心)和Dllhost 进程( 隔离/ 连接池的应用程序必需的)。inetinfo 、dllhost) Working Set 计数器反映了每个进程使Dllhost#n 进程都用的内存页的数量。系统的内存页(pool 要添加计数器Page) 只能由操作系统的核心模块直接访问, 用户进程不能访问。运行IIS 的服务器上, 负责web 连接的线程以及它需要的一些对象都保存在未分页的池中(nonpaged pool), 比如文件句柄和socket 连接。 |
|
Process |
Private Bytes |
指这个处理不能与其他处理共享的、已分配的当前字节数 |
|
Memory |
Committed Bytes |
是指以字节表示的确认虚拟内存。(确认内存是指为磁盘分 页文件在磁盘上保留的空间以便在需推荐不超过物理内存的75% 要将其写回磁盘时使用) |
推荐不超过物理内存的75% |
|
|
|
|
内存问题主要检查应用程序是否存在内存泄漏。如果发生了内存泄漏,Process\Private Bytes 计数器和Process\Working Set 计数器的值往往会升高, 同时Available Bytes 的值会降低。内存泄漏应该通过一个长时间的, 用来研究分析当所有内存都耗尽时, 应用程序反应情况的测试来检验。
处理器相关:
Object( 对象) |
Counters |
Description( 描述) |
参考值 |
System |
Processor Queue Length
|
Processor Queue Length 是指处理列队中的线程数。即使在有多个处理器的计算机上处理器时间也会有一个单列队。不像磁盘计数器, 这个计数器仅计数就绪的线程, 而不计数运行中的线程。如果处理器列队中总是有两个以上的线程通常表示处理器堵塞 |
小于2*CPU数目。 |
Processor |
%Processor Time |
CPU 使用率。这是查看处理器饱和状况的最佳计数器。显示所有 CPU 的线程处理时间。如果一个或多个处理器的该数值持续超过 90%,则表示此测试的负 载对于目前的硬件过于沉重。为多处理器服务器添加该计数器的 0 到 x 个实例 |
小于90%。排除内存因素, 如果该计数器的值比较大, 而同时网卡和硬盘的值比较低, 那么可以认为CPU 瓶颈。 |
System |
Context Switches/sec |
Context Switches/sec 指计算机上的所有处理器全都从一个线程转换到另一个线程的综合速率。当正在运行的线程自动放弃处理器时出现上下文转换, 由一个有更高优先就绪的线程占先或在用户模式和特权(内核)模式之间转换以使用执行或分系统服务。它是在计算机上的所有处理器上运行的所有线程的Thread: Context Switches/sec 的总数并且用转换数量衡量。在系统和线程对象上有上下文转换计数器 |
如果切换次数到5000*CPU个数和10000*CPU 个数中, 说明它忙于切换线程而不是 处理脚本 |
Processor |
%Privileged Time |
% Privileged Time 是在特权模式下处理线程执行代码所花时间的百分比。当调用 Windows 系统服务时, 此服务经常在特权模式运行, 以便获取对系统专有数据的访问。在用户模式执行的线程无法访问这些数据。对系统的调用可以是直接的(explicit)或间接的(implicit), 例如页面错误或中断。不像某些早期的操作系统,Windows 除了使用用户和特权模式的传统保护模式之外, 还使用处理边界作为分系统保护。某些由Windows 为您的应用程序所做的操作除了出现在处理的特权时间内, 还可能在其他子系统处理出现 |
|
Time |
Switches/sec ( 实例化inetinfo 和dllhost |
如果你决定要增加线程字节池的大小,你应该监视这三个计数器( 包括上面的一个)。增加线数可能会增加上下文切换次数, 这样性能不会上升反而会下降。如果实例的上下文切换值非常高, 就应该减小线程字节池的大小 |
|
Processor |
Interrupts/sec %DPC Time |
Time 这两个计数器能够反映处理器用在处理中断以及推迟处理调用的时间。 |
如果处理器使用率超过90%,且Interrupts/sec time大于15%则处理器可能负载过重,并发生中断 |
判断应用程序是否存在处理器瓶颈的方法: 如果Processor Queue Length 显示的队列长度保持不变(>=2*CPU数目) 个并且处理器的利用率%Processor Time 超过90%, 那么很有可能存在处理器瓶颈。
如果发现Processor Queue Length 显示的队列长度超过2*CPU数目, 而处理器的利用率却一直很低, 那么或许更应该去解决处理器阻塞问题, 这里处理器一般不是瓶颈。如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(Context Switches/sec 显示的上下文切换次数比较大), 那么就会占用大量的系统资源。如果系统的吞吐量降低并且CPU 的使用率很高,并且此现象发生时切换水平在15000 以上, 那么意味着上下文切换次数过高同时还可以比较Context Switches/sec 和%Privileged Time 来判断上下文切换是否过量。如果后者的值超过40%, 且上下文切换的速率也很高, 那么应该检查为什么会产生这样高的上下文切换。
磁盘相关:
Object |
Counters |
Description |
参考值 |
Processor |
%Processor Time % Privileged Time |
CPU 使用率该计数器对应于处理器执行Windows.内核命令( 如处理SQL Server I/O 请求) 所用时间的百分比。如果 Physical Disk 计数器的值很高时该计数器的值也一直很高, 则考虑使用速度更快或效率更高的磁盘子系统。
|
|
PhysicalDisk |
%Disk Time |
% Disk Time 指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大, 那 么硬盘不是瓶颈。如果只有%Disk Time 比较大, 另外两个都比较适中, 硬盘可能会是瓶颈。在记录该计数器之前, 请 在 Windows的命令行窗口中运行 diskperf -yD 。若数值持续超过 80%, 则可能内存泄漏。 |
|
PhysicalDisk |
AverageDisk Queue Length |
指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。
|
|
PhysicalDisk |
Disk reads/sec |
指在此盘上读取操作的速率 |
|
PhysicalDisk |
Disk Writes/sec |
指在此盘上写入操作的速率 |
|
每磁盘的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
比如:对于RAID 1,如果得到下面的计数器:
Disk Reads/sec = 90
Disk Writes/sec =75
根据公式:[reads + (writes*2)] / 2 or [90 + (75*2)] / 2 = 120I/Os每个磁盘。
备注:磁盘I/O分析方法用到的计数器有:Processor\PrivilegedTime PhysicalDisk\%Disk Time、Disk Transfer/sec
如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则可能内存不足。
UNIX相关的计数器介绍:
计数器名称 |
描述 |
Average Load |
上一分钟同时处于“就位”状态的平均进程数 |
CPU Utilization |
CPU的使用时间百分比 |
Paging Rate |
每秒读入物理内存或写入页面文件的页数 |
Collision rate |
每秒钟在以太网上检测到的冲突数 |
Context switches rate |
每秒钟在进程或线程之间切换的次数 |
DISK rate |
磁盘传输速率 |
Incoming packets error rate |
接收以太网数据包时每秒接收错误数 |
Incoming packets rate |
每秒钟传入的以太网数据包数 |
Interrupt rate |
每秒钟内的设备中断数 |
Outgoing packets error rate |
发送以太网数据包时每秒发送错误数 |
Outgoing packets rate |
每秒钟发送的以太网数据包数 |
Page-in rate |
每秒读入到物理内存中的页数 |
Page-in rate |
每秒写入页面文件和从物理内存删除的页数 |
Swap-in rate |
正在交换的进程数 |
Swap-out rate |
正在交换的进程数 |
System mode CPU Utilization |
在系统模式下使用CPU的时间百分比 |
User mode CPU Utilization |
在用户模式下使用CPU的时间百分比 |
如何启动RPC服务监控UNIX性能计数器,请参考文章:
http://cs-rnd.carestreamhealth.com/confluence/pages/viewpage.action?pageId=109846430
除此之外对UNIX的监控我们可以使用一些基本的UNIX命令来实现:top、topas、vmsate、IOstate、netstate、free等等。