crash-sentinel: 给 Windows 断电装个黑匣子
crash-sentinel 是个纯 PowerShell 的 Windows 崩溃监控, 专治那种突然黑屏断电、重启回来只有一个 Kernel-Power Event 41 的情况。Event 41 只告诉你“没正常关机”, 不告诉你为啥。它做两件事: 崩之前把现场录下来, 崩之后自动定位死因。
纯 PowerShell 5.1 零依赖, 看个温度不用装一堆监控软件。GPU 走 nvidia-smi(装了 N 卡驱动就有), CPU 负载走性能计数器, CPU 温度读 ACPI 热区, 全是系统现成的。双击 run.bat 就跑, 每 5 秒采一次 GPU/CPU 的温度、功耗、负载, 一条条写进带时间戳的 CSV。控制台带颜色, 绿正常黄偏热红危险, 危险还 beep 一声, 余光扫一眼就知道。
关键一点是断电不能丢数据。既然抓的就是突然断电, 日志写入就绝不能靠缓冲——最后几秒压在内存里没落盘, 断电一来全没, 监控就白做。所以每采一条立刻 flush 到磁盘, 宁可多花点 IO。
崩完重启跑 CrashReport.ps1: 先去事件日志找 Event ID 41 确认真是意外断电, 再翻最近那份监控日志, 把崩前几分钟拉出来定性, 出一份 .txt 扫一眼、一份 .html 看曲线。报告长这样:
DIAGNOSIS:
THERMAL THROTTLE CRASH: GPU hit critical temp (86C).
Sustained near-max temps caused VRM/power delivery to overload.
RECOMMENDATIONS:
- Cap frame rate to reduce sustained GPU load
- Limit GPU power target to 80-85%
- Improve laptop ventilation
我这台就是 GPU 长期贴 80 多度、功耗顶 160W, 不是软件炸, 是热和供电扛不住。后来把功耗墙压到 85%、锁了帧率, 断电没再犯。
坑也有。CPU 温度一开始几乎不动, 查下来 ACPI 热区读的是封装温度不是核心 die 温度, 有些笔记本偏保守, 干脆拿 GPU 温度和功耗当主指标, 它俩才是真凶。阈值、采样间隔、日志路径都在 settings.json, 不用改脚本。setup.bat 管理员跑一次装两个计划任务: 一个登录自动开监控, 一个开机检测崩溃有就出报告。目前只支持 N 卡, 诊断链搭在 nvidia-smi 上, AMD 手头没卡先搁着。