我有一个HP ProLiant DL380 G7系统,该系统使用2个6核CPU,并且启用了超线程,总共有24个逻辑CPU(如Windows所示)。
运行我们的应用程序时,系统的总CPU利用率很好,但是24个CUP之一被固定为100%:
编辑:这是这段时间内系统进程以及具有高利用率的处理器的PerfMon数据:
这正常吗?如果不是,是否有办法识别正在使用该逻辑CPU的进程?Windows PerfMon,ResMon,任务管理器和进程资源管理器没有任何帮助,只能识别出CPU为100%。
我有一个HP ProLiant DL380 G7系统,该系统使用2个6核CPU,并且启用了超线程,总共有24个逻辑CPU(如Windows所示)。
运行我们的应用程序时,系统的总CPU利用率很好,但是24个CUP之一被固定为100%:
编辑:这是这段时间内系统进程以及具有高利用率的处理器的PerfMon数据:
这正常吗?如果不是,是否有办法识别正在使用该逻辑CPU的进程?Windows PerfMon,ResMon,任务管理器和进程资源管理器没有任何帮助,只能识别出CPU为100%。
Answers:
正如其他人已经指出的那样,我们可以从该屏幕截图中看到,工作如此努力的CPU一直将所有时间都花在内核模式上。(红色。)
以管理员身份运行Powershell,输入:
Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending
列表顶部的进程是当前使用最多内核模式CPU时间的进程。如果该进程不是 “系统”,则您已经找出导致此CPU使用率的用户模式进程。如果“特权处理器时间”最长的进程是“系统”(我怀疑是“系统”,那么它会稍微复杂一些)。
打开进程资源管理器。(可选)设置符号服务器。确保您以完整的UAC海拔高度运行。右键单击系统“进程”,然后转到“属性”。然后转到“线程”选项卡。按CPU使用率对线程进行排序。导致所有这种内核模式工作的线程应该在这里。如果您查看“起始地址”下列出的模块,它应该为您提供与工作有关的线索。例如,如果是NDIS.sys,则它是网络接口驱动程序。如果设置了符号服务器,则应该看到模块中的函数名称(除非该模块不是Microsoft,否则),您只会看到与模块起始地址的数字偏移量。
或者,使用Windows Performance Toolkit中的Xperf来分析中断,DPC等。
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
然后停止录制 xperf -d logfile.etl
Xperf替代了旧的Kernrate工具,可以为您提供一些非常详细的数据。
当CPU在内核模式下工作时,它主要运行中断服务程序。(ISR)发生中断时,该处理器上的用户模式工作被挂起,并且CPU运行注册到该中断的ISR。如果您发现CPU在这些中断上花费了过多的时间,则通常表明设备驱动程序有故障,需要对其进行更新。
什么错误我(没有双关语意)有关此方案是,它虽然看起来好像什么内核线程是这样做似乎affinitized到一个核心。我想知道为什么调度程序似乎只调度线程在那个看似任意的内核上运行。因此,我有一种感觉,我们需要找到编写此设备驱动程序的人,并向他们展示如何执行线程DPC,而不是显式设置内核线程等。
在“任务管理器”的“详细信息”选项卡上显示“ CPU时间”列,并查找CPU时间计数稳定增长的进程。那就是你的过程。它应该经常使用约4.17%的CPU。
这似乎是所有内核时间,可能是中断,它们可能仅由单个CPU处理。