必须用dmesg提取内核环形缓冲区原始日志,因其不依赖日志服务、可捕获panic瞬间未刷盘的oops/bug信息;执行sudo dmesg -t -l查看带时间戳与颜色的完整日志,重点搜索“kernel panic”“oops”等关键字,并导出为文件分析call trace。

当统信UOS系统发生内核崩溃(如蓝屏、黑屏卡死、自动重启后丢失现场),必须直接提取内核环形缓冲区原始输出,因为journalctl可能未捕获panic前最后一刻的Oops或BUG信息,/var/log/messages也可能因文件系统未同步而缺失关键行。
用dmesg提取崩溃瞬间的内核原始日志
这一步操作起来很简单,直接把命令敲进去就行。dmesg不依赖日志服务是否运行,能读取内核启动至今所有消息,包括panic发生时写入ring buffer但尚未刷盘的内容。
执行命令查看带本地时间戳和颜色标识的完整内核日志:sudo dmesg -T -L
若屏幕已被后续日志刷屏,重点查找包含“Kernel panic”、“Oops”、“BUG:”、“NMI watchdog”、“hard LOCKUP”的行——这些是内核崩溃最典型的标记,出现在输出末尾附近。
注意:-T参数输出的是本地时间,比默认秒级时间戳更易关联你操作的时间点;-L开启颜色高亮,错误类信息自动标为红色,一眼可辨。
回溯上一次关机前的崩溃现场
如果当前系统已重启,上次崩溃的日志可能被新启动覆盖,但dmesg仍可从内存残留中恢复部分数据。
方法一:执行 sudo dmesg -H -T --since "yesterday",强制按时间范围筛选,避免被本次启动的正常消息淹没。
方法二:仅显示错误与警告级别,快速聚焦异常:sudo dmesg -l err,warn。该命令不加sudo也能运行,但部分早期启动消息可能因权限限制被截断,【务必加sudo执行】。
导出内核日志供离线深度分析
崩溃日志往往需要反复比对或提交给技术支持,必须保存为本地文件。
第一步:执行 sudo dmesg > /home/$USER/dmesg_crash.log
第二步:确认导出成功,运行 ls -lh /home/$USER/dmesg_crash.log 查看文件大小,非零即有效。
第三步:用文本编辑器打开该文件,搜索“Call Trace”或“RIP:”字段——这是定位崩溃函数调用栈的关键线索,通常紧随“Oops”出现。
注意:【$USER变量必须保留,不可替换为具体用户名】,否则路径会失效。
交叉验证journalctl中的服务级连锁反应
内核崩溃常引发上层服务异常,比如lightdm崩溃、dbus中断,这些在journalctl中会有连带记录,不能只盯dmesg。
① 先查本次启动中所有错误:sudo journalctl -b -p err..warning
② 再聚焦图形会话核心服务:sudo journalctl -b -u lightdm.service -u display-manager.service
③ 若发现lightdm在崩溃前几秒报“Failed to start session”,说明内核问题已传导至桌面层,需将dmesg中对应时间点的Oops与journalctl中该服务退出日志并列比对。
display-manager.service 是 lightdm 的符号链接,二者日志内容高度重合,查其一即可,不必重复执行。
启用kdump机制捕获完整vmcore(仅限严重场景)
当dmesg只能看到部分Oops、无法还原完整调用栈时,必须启用kdump,在下次panic发生时自动保存内存镜像。
方法一:确认kdump已安装并启用:sudo apt install linux-kdump && sudo systemctl enable kdump-tools
方法二:编辑配置文件启用保留内存:sudo nano /etc/default/kdump-tools,将USE_KDUMP设为1,并设置KDUMP_CMDLINE_APPEND="crashkernel=512M"
方法三:重启系统使配置生效:sudo systemctl restart kdump-tools
方法四:验证是否激活:sudo kdump-config show | grep -E "(loaded|status)",输出应含“loaded: yes”和“status: ready”











