windows-server-2008-r2 – 为什么我的24个CPU中有1个挂起100%?

我有一个HP ProLiant DL380 G7系统,它使用2个6核cpu,启用了超线程,总共24个逻辑cpu(如 Windows所示).

运行我们的应用程序时,总系统cpu利用率很好,但24个CUP中的一个与100%挂钩:

编辑:这是此时系统进程的PerfMon数据,以及具有高利用率的处理器:

这是正常的吗?如果没有,有没有办法确定哪个进程正在使用该逻辑cpu?除了确定cpu为100%之外,Windows PerfMon,ResMon,任务管理器和Process Explorer一直没有帮助.

正如其他人已经指出的那样,我们可以从截图中看到,那些努力工作的cpu正在将所有时间花在内核模式上. (红色.)

管理员身份运行Powershell,键入:

Get-Process | Select Name,PrivilegedProcessorTime | `
sort-object PrivilegedProcessorTime -Descending

列表顶部的进程是当前使用最内核模式cpu间的进程.如果该进程不是“系统”,那么您只是想出了导致此cpu使用率的用户模式进程.如果具有最高特权处理器时间的进程是系统,我怀疑它是,那么它有点复杂.

打开Process Explorer. (可选)设置符号服务器.确保以完整的UAC提升运行.右键单击系统“进程”,然后转到“属性”.然后转到“线程”选项卡.按cpu使用情况对线程进行排序.导致所有这些内核模式工作的线程应该在这里.如果查看“起始地址”下列出的模块,它应该为您提供有关工作相关内容的线索.例如,如果它是Ndis.sys,那就是网络接口驱动程序.如果设置符号服务器,您应该看到模块中函数名称(除非模块是非Microsoft的),否则您只会看到模块起始地址的数字偏移量.

或者,使用Windows性能工具包中的Xperf来分析中断,DPC等.

xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT

并使用xperf -d logfile.etl停止录制

Xperf取代了旧的Kernrate工具,可以为您提供一些非常详细的数据.

cpu在内核模式下工作时,它主要运行中断服务程序. (ISR)当发生中断时,用户模式工作在该处理器上暂停,并且cpu运行注册到该中断的ISR.如果您发现cpu在这些中断上花费了过多的时间,则通常表示需要更新的故障设备驱动程序.

关于这个场景的问题是什么(没有双关语)但是看起来好像这样做的内核线程似乎与那个核心相关联.我想知道为什么调度程序似乎只是安排线程在那个看似随意的核心上运行.所以我有一种感觉,我们需要找到谁编写这个设备驱动程序并向他们展示如何进行线程DPC,而不是在内核线程上明确设置关联性等.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...