您将使用哪些WQL查询来监视典型的Windows瓶颈? 你会用什么来获得类似于“顶”或“净”的数据? 你会在什么时间间隔?
这里有一些我觉得有帮助的。
SELECT PercentDiskTime, AvgDiskQueueLength, DiskReadBytesPerSec, DiskWriteBytesPerSec FROM Win32_PerfFormattedData_PerfDisk_PhysicalDisk SELECT Caption, CommittedBytes, AvailableBytes, PercentCommittedBytesInUse, PagesPerSec, PageFaultsPerSec FROM Win32_PerfFormattedData_PerfOS_Memory SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor SELECT Caption, WorkingSet, PageFaultsPerSec,IOReadBytesPerSec, IOWriteBytesPerSec, ThreadCount, HandleCount FROM Win32_PerfFormattedData_PerfProc_Process SELECT Caption, BytesReceivedPerSec, BytesSentPerSec FROM Win32_PerfFormattedData_Tcpip_NetworkInterface
这真是一个很好的问题 ,可惜它没有得到更多的爱!
我的瓶颈分析的基本理论是将系统看作一个有四种有限资源的盒子: 处理器,内存,磁盘和networking 。 所以我想要得到每个这些基本数字来确定盒子的健康状况。 我想要易于理解的数字:高是坏,低是好。 0是最好的,但从来没有完全可以实现(毕竟我们买电脑做工作 ,呃?)。 一旦我看到四种资源中的哪一种是主要瓶颈,我就可以继续确定哪个程序或进程正在占用所有的资源,并做出有教育的决定,以确定是否需要增加资源 – 或者调整程序/进程以使用更less的资源。
我将把我使用的主要性能计数器格式化为WMIC查询,因为不需要脚本(虽然这当然是可以的!)。 您可以直接在cmd控制台中input每个查询:
wmic path Win32_PerfFormattedData_PerfOS_System get ProcessorQueueLength
以上是处理器队列长度 。 这告诉有多less线程正在队列中等待CPU处理。 高数字不好,低数字好。 一般来说,我认为一个值<10是一个健康的系统。
wmic path Win32_PerfFormattedData_PerfOS_Memory get PagesInputPerSec
以上是内存,每秒页数input ,从磁盘读取页面以解决硬页面错误的速率。 当进程引用虚拟内存中不在物理内存中的页面时,将发生硬页面错误,并且必须从磁盘中检索。 不过,这个计数器在Perfmon的图表视图中效果最好。 在一台健康的(不是瓶颈的)计算机上,随着数据从磁盘读取到RAM中,您会看到偶然出现的尖峰,您看到的峰值越高,越高,系统的内存就越多。 如果系统经常停留在非零值的时间超过5秒钟,那么系统可能存在内存瓶颈。
wmic path Win32_PerfFormattedData_PerfDisk_PhysicalDisk get AvgDiskQueueLength, name
以上是物理磁盘,平均磁盘队列长度 。 我认为这是系统运行状况的关键指标,因为内存瓶颈会由于页面文件交换过多而导致磁盘陷入停滞状态,并且通常也会提高CPU利用率。 它将显示每个安装的磁盘的项目以及所有磁盘的总数。 性能良好的单个磁盘的值将会在2或更低。 对于数组,将主轴数量除以队列长度(例如:数组中的4个主轴除以队列长度8 = 2,这表示arrays运行良好)。
wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface get OutputQueueLength, PacketsReceivedErrors, Name, currentbandwidth
最后,上面我们有网卡性能。 具体networking接口,输出队列长度和数据包接收错误 。 这两个计数器让我们知道有多less个数据包在等待发送,有多less入站数据包导致了可能导致重发的错误。 我们希望两个数字都保持为零。 在这个查询中,我也得到了当前NIC的带宽,这是有用的信息。
一旦我确定哪个资源被滥用,我通常依靠Process Explorer或Perfmon的进程对象来发现哪个进程是资源pipe理器。