您将使用哪些 WQL 查询来监控典型的 Windows 瓶颈?您将使用哪个查询来获取类似于“top”或“netstat”的数据?您将以什么间隔进行轮询?
以下是我认为有用的几点。
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
答案1
这确实好问题,可惜它没有得到更多的喜爱!
我对瓶颈分析的基本理论是将系统视为一个具有 4 种有限资源的盒子:处理器、内存、磁盘、和网络。因此,我希望获得每个数字的基本数字,以确定盒子的健康状况。我希望数字易于解释:高表示不好,低表示好。0 是最好的,尽管永远无法完美实现(毕竟我们买电脑是为了做工作,嗯?)。一旦我看到这四种资源中的哪一种是主要瓶颈,我就可以继续确定哪个程序或进程正在消耗所有资源,并做出明智的决定,即我是否需要增加该资源 - 或者调整程序/进程以使用更少的资源。
我将格式化我使用的主要性能计数器,从本文,作为 WMIC 查询,因为不需要编写脚本(尽管这当然是可能的!)。您可以将每个查询直接输入到 cmd 控制台中:
wmic path Win32_PerfFormattedData_PerfOS_System get ProcessorQueueLength
以上是处理器队列长度。这表示有多少线程在队列中等待 CPU 处理。数字大表示不好,数字小表示好。一般来说,我认为小于 10 的值表示系统健康。
wmic path Win32_PerfFormattedData_PerfOS_Memory get PagesInputPerSec
以上是内存,每秒输入页面数,即从磁盘读取页面以解决硬页面错误的速度。当进程引用虚拟内存中不在物理内存中的页面时,就会发生硬页面错误,必须从磁盘检索。不过,此计数器在 Perfmon 的图形视图中效果最佳。在健康(无瓶颈)的计算机上,您会看到偶尔的峰值,因为数据从磁盘读入 RAM 时,您看到的峰值越多,峰值越高,系统的内存限制就越大。如果系统经常在超过五秒的时间内保持非零值,则您的系统可能存在内存瓶颈。
wmic path Win32_PerfFormattedData_PerfDisk_PhysicalDisk get AvgDiskQueueLength, name
以上是PhysicalDisk,平均磁盘队列长度。我认为这是系统健康状况的关键指标,因为内存瓶颈也会因过多的页面文件交换而使磁盘陷入困境 - 并且通常还会推高 CPU 利用率。它将显示每个已安装磁盘的项目以及所有磁盘的总数。性能良好的单个磁盘的此值应为 2 或更低。对于阵列,将主轴数除以队列长度(例如:阵列中的 4 个主轴除以队列长度 8 = 2,这意味着阵列性能良好)。
wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface get OutputQueueLength, PacketsReceivedErrors, Name, currentbandwidth
最后,上面我们介绍了 NIC 性能。具体来说网络接口,输出队列长度和数据包接收错误。这两个计数器让我们知道有多少数据包正在等待发送,以及有多少入站数据包导致错误,这可能导致重新传输。我们希望这两个数字都保持为零。在此查询中,我还获得了 NIC 的当前带宽,这是有用的信息。
一旦我确定了哪些资源被过度使用,我通常会依靠进程探索器或 Perfmon 的进程对象来发现哪个进程占用大量资源。