CRITICAL_PROCESS_DIED:记录一次Hyper-V来宾计算服务导致的电脑无限蓝屏_critical process died
故障症状
故障周期:2024年6月开始,稳定触发且一直没找到办法,先用着双系统,一直到8月份解决。
故障表现:
- 进入系统后2分钟~3分钟蓝屏,蓝屏代码CRITICAL_PROCESS_DIED。重点是这个蓝屏无限重复,准时且稳定,在蓝屏前电脑功能一切正常,但是到时间一定会蓝屏。
- 安全系统下长时间没有蓝屏。说明不是系统内核的问题。
- 电脑其他系统都正常使用,所以主系统故障期间一直用C盘一个VHD虚拟硬盘里的系统在代替工作。
解决办法
省流版:经过WinDbg程序对内存小转储文件dump进行分析(需要加载symbol文件才能用analyze -v命令分析得出来),崩溃进程是VmComputeAgent。
我做了以下关键操作:
回到正常开机(或者进安全模式),在蓝屏前:
- win+R输入services.ms打开服务管理
禁用并关闭Hyper-V来宾计算服务(vmcomputeagent.exe)。 - 打开任务管理器立刻停止Hyper-V来宾计算服务(vmcomputeagent.exe)
随后不再出现蓝屏,甚至看了半个小时的视频确保正常:
断断续续的求索之路
一战:必应与Windows恢复
看到蓝屏,肯定是先去搜索这个蓝屏代码:CRITICAL_PROCESS_DIED,很不幸,在头几页的都是百家号和灌水文。由于系统在安全模式不蓝屏,而且在第二个系统不蓝屏,首先排除一切硬件和驱动问题。还有一些更新系统补丁等等没用的也略过。
怀疑系统文件损坏,于是跑了一遍DISM /Online /Cleanup-Image /RestoreHealth
,显示有错误并修复成功,但还是蓝屏。
继续搜,看到有建议使用Windows系统还原点的:
恰好我有几个月前的还原点,于是选择一个还原。进入更新页转圈圈,卡在76%整整两个小时,最后弹出来报错说无法还原到此还原点。心态炸了,果断放弃
二战:初识WinDbg
第二个星期从学校回来,看到电脑还是蓝屏,不忍心重装(数据是最宝贵的东西),于是继续去必应找答案,所幸找到微软的帖子:
反复 CRITICAL_PROCESS_DIED 蓝屏 - Microsoft Community
错误检查 0xEF CRITICAL_PROCESS_DIED - Windows drivers | Microsoft Learn
微软还是有真东西啊。这两个帖子都提到了使用 Windows 调试器 (WinDbg) 进行崩溃转储分析。之前从来没听说过这个工具,但是身为程序员(入门)肯定不会慌这种调试工具。帖子要找到Minidump小内存转储文件,通常在 C:\\Windows\\Minidump\\xxxxxx-xxxxx-xx.dmp,并且使用!analyze -v查看关键代码。
果断在副系统安装:
并且找到.dmp文件,拖进windbg
这里提示:没有使用正确的symbol(符号分析库),只能猜测蓝屏原因是ntoskrnl.exe
搜索“ntoskrnl.exe”,弹出一大堆蓝屏贴,有说检查用mdsced.exe内存的、chkdsk c: /f检查硬盘、DirectX修复工具修一下、sfc /scannow跑一下的、回滚网络驱动的…半信半疑地全部照做了,结果全部没用…
自己研究一下,任务管理器有这个线程,尝试停止进程,但是一直被拒绝访问。
又去翻了一下事件查看器,蓝屏时间左右有一些报错,但是没看出什么出来。
三战:symbol工具立大功
从symbol工具下手,首先我还是需要学一下windbg怎么用(PS:这个时候还没有新版windbg preview),教程很多但是能看得懂的很少qwq 这个教程教会了我怎么下载symbol符号文件:windbg使用教程(调试异常及死锁等)_windbg怎么用-CSDN博客
在windbg中>File>Symbol File Path里注意事项:SRV*c:\\symbols*http://msdl.microsoft.com/download/symbols;C:\\Users\\heuwz\\source\\repos\\x64\\Release其中*e:\\symbols*为符号缓存目录(就像VS中设置符号缓存目录),http://msdl.microsoft.com/download/symbols为microsoft符号服务器,C:\\Users\\heuwz\\source\\repos\\x64\\Release为目标程序符号(pdb文件)所在目录;
反正我只看懂了:打开这个框框,把SRV*C:\\symbols*http://msdl.microsoft.com/download/symbols;
输进去,勾上Reload,点ok;
显示Loading,等了几分钟没反应,先敲了!analyze -v
,但是显示*BUSY*
,说明symbol还没下载完,只能继续等,最后等了十分钟左右。
BUZY消失之后敲!analyze -v
,有结果了:
这里显示PROCESS_NAME: VmComputeAgent(进程名:VmComputeAgent),表示这个是导致蓝屏崩溃的程序。啊哈!终于找到你!!
当时其实没搜索VmComputeAgent是啥,但是看到vm能知道这肯定跟我电脑里的Vmware或者虚拟机服务有关。想要卸载vmware和Hyper-V服务,但是没卸载完成就蓝屏了qwq
遂转换思路,进入安全模式卸载vmware和Hyper-V服务,并找一切跟VM和虚拟机有关的服务,全部禁用:
后面回到正常开机,在蓝屏前又打开服务管理禁用了Hyper-V来宾计算服务(vmcomputeagent.exe)。(歪打正着,这个正是PROCESS_NAME: VmComputeAgent),然后打开任务管理器把相关的又停止了一通。
大结局,包饺子
之后正常了。盯着十分钟,蓝屏再也不出现了,重启也不出现了。后面马上换回主系统。
后记:
搜索VmComputeAgent这个线索太准确了,立马跳出微软社区的相关帖子:
看来这个毛病不是我第一个发现的,但是由于最初的线索只有CRITICAL_PROCESS_DIED,基本找不到真正的解决办法。重点还是要会使用windbg进行分析,而且要有symbol工具。
记录于2025年3月20日,作者Yumi0606