我有一个HP ProLiant DL380 G7系统,使用2个6核CPU,启用超线程function,共有24个逻辑CPU(如Windows所示)。
在运行我们的应用程序时,整个系统的CPU利用率是好的,但24个CUP中有一个是100%:
编辑:这是在此期间系统进程的PerfMon数据,以及对于高利用率的处理器:
这是正常的吗? 如果没有,有没有办法确定哪个进程正在使用该逻辑CPU? Windows PerfMon,ResMon,任务pipe理器和进程资源pipe理器一直没有帮助,除了确定CPU是100%。
正如其他人已经指出的那样,我们可以从屏幕截图中看到,工作如此辛苦的CPU正在把所有的时间花费在内核模式中。 (红色)
以pipe理员身份运行Powershell,请键入:
Get-Process | Select Name, PrivilegedProcessorTime | ` Sort-Object PrivilegedProcessorTime -Descending
列表顶部的进程是目前使用最内核模式CPU时间的进程。 如果这个过程不是 “系统”,那么你只是想出了什么用户模式进程造成这个CPU使用率。 如果具有最高特权处理器时间的进程是系统,我怀疑它是,那么它有点复杂。
打开Process Explorer。 或者,设置符号服务器。 确保您的UAC标高已满。 右键单击系统“进程”并转到属性。 然后转到“线程”选项卡。 按CPU使用率sorting线程。 导致所有这种内核模式工作的线程应该在这里。 如果您查看“起始地址”下列出的模块,它应该为您提供与工作相关的线索。 如果是NDIS.sys,例如,这是一个networking接口驱动程序。 如果你设置了符号服务器,你应该在模块中看到一个函数的名字(除非这个模块是非微软的),否则你会看到一个从模块起始地址的数字偏移量。
或者,使用Windows Performance Toolkit中的Xperf来分析中断,DPC等。
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
并用xperf -d logfile.etl
停止录制
Xperfreplace了旧的Kernrate工具,并且可以为你提供一些非常详细的数据。
当CPU在内核模式下工作时,主要是运行中断服务例程。 (ISR)发生中断时,用户模式工作在该处理器上暂停,CPU运行注册到该中断的ISR。 如果你发现你的CPU在这些中断上花费了过多的时间,那通常表示需要更新的错误的设备驱动程序。
这个场景有什么错误(不是双关语意思),尽pipe看起来似乎是这样做的任何内核线程似乎都被关联到这个核心。 我想知道为什么调度员似乎只是调度线程运行在一个看似任意的核心。 所以我有一种感觉,我们需要find编写这个设备驱动程序的人,并向他们展示如何执行线程化DPC,而不是明确地设置内核线程的亲和性等。
在“任务pipe理器”中的“详细信息”选项卡上显示“CPU时间”列,查找CPU时间计数稳步增加的进程。 这是你的楔子过程。 它应该持续使用约4.17%的CPU。
这似乎是所有的内核时间,可能是中断,他们可能只能由一个CPU来处理。
寻找CPU利用率约为4%(=可用CPU总数的1/24)的进程。 这应该是一个不断占用一个CPU。