我通过强制完全内存转储(ctrl + scrl + scrl方法)来调试系统挂起/冻结问题,而我并不了解某些数据。
当我运行时!exqueue 6我看到6个Critical,8个Delayed和1个HyperCritical线程但每个都包含一个类似的堆栈,只有以下调用:
nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeRemoveQueueEx+0x323
nt!ExpWorkerThread+0xe9
nt!PspSystemThreadStartup+0x5a
nt!KxStartSystemThread+0x16
据我所知,这些都是创建但没有任何工作的线程,对吧?
这是转储时系统上实际发生的情况,还是仅仅是使用此方法强制转储的影响?
这也是为什么在空闲PID和断点下唯一正在运行的线程实际上是英特尔?
[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
我似乎无法准确了解工作队列或转储时运行线程的情况。我是否误解了这些数据,还是因为它被捕获了?
任何帮助都将不胜感激。
答案 0 :(得分:1)
在启动过程中,系统会自动创建许多系统线程。稍后系统可以根据负载认为有必要创建更多系统线程。 您正在显示的系统线程现在没有任何事情要做,但它们可能早先很忙。我不认为(6,8,1)线程表示任何异常wrt。负荷。
正在执行intelppm的3个线程处于空闲状态,然后很可能是权力崩溃了。
系统可能有其他原因导致无响应而不是高负载。有时只需要一个线程陷入僵局。所以也许看看其他线程在做什么,以及其中任何一个线程是否有一个“可疑”的调用堆栈。在执行错误检查之前,核心0(执行错误检查)还做了什么特别的事情吗?