常见的 WQL 监控查询

Yan*_*ncy 12 monitoring wmi

您将使用哪些 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
Run Code Online (Sandbox Code Playgroud)

quu*_*uux 7

这真是一个很好的问题,可惜没有得到更多的爱!

我的瓶颈分析的基本理论是将系统视为具有 4 种有限资源的盒子:处理器、内存、磁盘网络。所以我想获得每个这些的基本数字来确定盒子的健康状况。我想要易于理解的数字:高是坏的,低是好的。0 是最好的,虽然永远不可能完美实现(毕竟我们买电脑是为了工作,嗯?)。一旦我看到四种资源中的哪一种是主要瓶颈,我就可以继续确定哪个程序或进程正在消耗所有资源,并就是否需要增加该资源做出明智的决定 - 或调整程序/进程以使用更少的资源。

我将格式化我使用的主要性能计数器,从这篇文章,作为WMIC查询,因为不需要脚本(虽然它肯定是可能的!)。您可以将这些查询中的每一个直接输入到 cmd 控制台中:

wmic path Win32_PerfFormattedData_PerfOS_System get ProcessorQueueLength
Run Code Online (Sandbox Code Playgroud)

以上是处理器队列长度。这告诉有多少线程在队列中等待 CPU 处理。高数不好,低数好。通常我认为值 <10 是一个健康的系统。

wmic path Win32_PerfFormattedData_PerfOS_Memory get PagesInputPerSec
Run Code Online (Sandbox Code Playgroud)

以上是Memory, Pages Input per Second,从磁盘读取页面以解决硬页面错误的速率。当进程引用虚拟内存中不在物理内存中且必须从磁盘中检索的页面时,就会发生硬页面错误。不过,这个计数器在 Perfmon 的图形视图中效果最好。在一台健康(不是瓶颈)的计算机上,当数据从磁盘读取到 RAM 时,您会偶尔看到峰值,您看到的峰值越多,并且它们越高,系统的内存限制就越多。如果系统经常保持非零值超过 5 秒,那么您的系统可能存在内存瓶颈。

wmic path Win32_PerfFormattedData_PerfDisk_PhysicalDisk get AvgDiskQueueLength, name
Run Code Online (Sandbox Code Playgroud)

以上是PhysicalDisk, Average Disk Queue Length。我认为这是系统健康状况的关键指标,因为内存瓶颈也会由于过度的页面文件交换而使磁盘陷入困境 - 并且通常也会提高 CPU 利用率。它将显示每个已安装磁盘的项目以及所有磁盘的总数。性能良好的单个磁盘将具有 2 或更低的此值。对于阵列,将轴数除以队列长度(例如:阵列中的 4 个轴除以队列长度 8 = 2,这意味着阵列性能良好)。

wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface get OutputQueueLength, PacketsReceivedErrors, Name, currentbandwidth
Run Code Online (Sandbox Code Playgroud)

最后,上面是 NIC 性能。特别是网络接口、输出队列长度数据包接收错误。这两个计数器让我们知道有多少数据包正在等待发送,以及有多少入站数据包导致了可能导致重传的错误。我们希望两个数字都保持为零。在此查询中,我还获得了 NIC 的当前带宽,这是有用的信息。

一旦我确定哪个资源被过度使用,我通常依赖于Process Explorer或 Perfmon 的进程对象来发现哪个进程是资源猪。