perfmon-利用最大 CPU 的单线程-如何检测?

perfmon-利用最大 CPU 的单线程-如何检测?

我是一名 Windows 服务器管理员。我的部分工作是维护服务器并对监控警报做出反应,这些警报通常与高 CPU 负载有关。有时,某些应用程序或进程会陷入无限循环或类似情况,并且只使用一个内核/线程,但占用了 100% 的 CPU,因此在 4 核系统上,总 CPU 使用率为 25%,并且不会触发任何警报,尽管我想知道是否会发生这种情况。我正在考虑检测这种情况的方法。仅将阈值设置为 25% 的 CPU 使用率是行不通的,因为系统上运行的所有进程的总和很容易超过 25%,但这无法检测只有一个进程/线程对此负责的情况。我发现,在性能监视器中,我可以添加 \Process(进程名称)\% Processor Time,如果单个进程以最大负载运行,并且在 core i7 上的任务管理器中显示 12%(例如,您可以通过使用 LameXP 重新编码 MP3 来测试它),此计数器将显示 100,因此这有效并且可以检测到此类进程。问题是它只对设置计数器时已经存在的进程起作用。即使您使用所有实例并启动它,它也不会显示新启动的进程,这是一个问题。是否有其他性能计数器或实用程序可以显示这种情况?

编辑:例如 在此处输入图片描述

例如,如果我编码一些大型 WAV 文件,我可以设置 lxp_lame.exe 的亲和性,使其不使用所有核心,而只使用一个核心,然后是的 - 此 powershell 代码片段将显示该核心的 100。如果我不这样做,该过程会在核心之间跳转,并且永远不会有任何高数字。

答案1

使用 WMI 处理器性能计数器。排除带有 的计数器_Total,因为它们会平均负载。

Get-WMIObject -Class Win32_PerfFormattedData_Counters_ProcessorInformation |
  Where-Object {$_.Name -notmatch "total"} |
    Select-Object -Property Name,PercentIdleTime,PercentProcessorTime

你会看到类似这样的内容:

Name PercentIdleTime PercentProcessorTime
---- --------------- --------------------
0,0              100                    0
0,1               95                    4
0,2              100                    0
0,3               89                   10

我将把生成警报的任务留给你。

相关内容