0

我正在通过强制进行完整的内存转储(ctrl + scrl + scrl 方法)来调试系统挂起/冻结问题,但我不了解某些数据。

当我运行 !exqueue 6 时,我看到 6 个关键线程、8 个延迟线程和 1 个超临界线程,但每个线程都包含一个类似的堆栈,只有以下调用:

nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeRemoveQueueEx+0x323
nt!ExpWorkerThread+0xe9
nt!PspSystemThreadStartup+0x5a
nt!KxStartSystemThread+0x16

据我所知,这些都是创建但没有进行任何工作的线程,对吧?

这是转储时系统上实际发生的情况,还是只是使用此方法强制转储的效果?

这也是为什么在空闲 PID 和断点下唯一运行的线程实际上是 intelppm 的原因吗?

                        [fffff80003617180 Idle]
   0.000000  fffff80003616cc0 ffff8835 RUNNING    nt!KeBugCheckEx
   0.000000  fffff880009f9fc0 ffff92bb RUNNING    intelppm!MWaitIdle+0x19
   0.000000  fffff88002f6ffc0 ffff9191 RUNNING    intelppm!MWaitIdle+0x19
   0.000000  fffff88002fe1fc0 ffff93c4 RUNNING    intelppm!MWaitIdle+0x19

在转储时,我似乎并没有真正准确地了解工作队列或正在运行的线程。我是误解了数据还是因为它是如何被捕获的?

任何帮助,将不胜感激。

4

1 回答 1

1

在引导过程中,您的系统将自动创建一些系统线程。稍后,如果系统认为有必要,可以根据负载创建更多的系统线程。您正在显示的系统线程现在没有任何事情可做,但它们之前可能一直很忙。我不认为 (6, 8, 1) 线程表示任何异常情况。加载。

执行 intelppm 的 3 个线程处于空闲状态,然后很可能电源崩溃了。

除了高负载之外,系统变得无响应可能还有其他原因。有时只需要一个线程被死锁。所以也许看看其他线程在做什么,如果它们中的任何一个有一个“可疑”的调用堆栈。在执行错误检查之前,核心 0(执行错误检查)也做了什么特别的事情吗?

于 2016-03-10T08:58:18.893 回答