内核日志从哪来
内核与驱动在运行中把消息写入自己的环形缓冲区:硬件报错、磁盘超时、网络链路变化、内存不足杀进程、内核崩溃调用栈都出现在这里。读取它有两条路——通过日志服务按内核来源过滤可以拿到结构化、可持久化的记录,也能按时间与优先级筛选;直接读缓冲区则最快,但受限于缓冲区容量,新消息会覆盖旧消息。排查硬件与驱动类问题时,这里往往是第一现场。
基本信息
| 读取命令 | 按内核来源过滤读取系统日志,或用缓冲区读取命令 |
|---|---|
| 时间显示 | 缓冲区命令默认时间戳不便阅读,需加可读时间选项 |
| 优先级过滤 | 可只看错误及以上级别 |
| 持久化 | 缓冲区内容重启即丢,落盘依赖日志服务是否持久化 |
| 访问限制 | 部分系统限制普通用户读取内核日志 |
| 适用平台 | Kylin V10 / UOS / openEuler 通用 |
典型使用场景
- 服务莫名被杀:确认是否触发内存不足的进程终止记录
- 磁盘异常:查看块设备报错、文件系统一致性告警
- 网卡链路抖动:核对链路上下线记录,判断是物理层还是配置层
- 启动问题:按本次启动过滤内核日志,看设备初始化是否报错
- 驱动排障:结合设备相关关键字定位驱动加载失败
- 巡检取证:把错误级别的内核日志定期采集归档
常用命令
常用命令
journalctl -k -b | tail -50 # 本次启动的内核日志尾部
journalctl -k -p err -b --no-pager # 只错误级及以上
dmesg -T | tail -30 # 读缓冲区并显示可读时间
dmesg -T | grep -iE 'error|fail|timeout' # 在缓冲区里筛关键字
journalctl -k -b -1 --no-pager | tail -40 # 上一次启动的内核日志
cat /proc/sys/kernel/dmesg_restrict # 为 1 表示仅特权用户可读常见关键字读法
| 关键字 | 含义 | 排查方向 |
|---|---|---|
| Out of memory | 内存不足触发进程终止 | 核对内存与上限设置,确认被杀进程 |
| I/O error | 块设备读写报错 | 检查磁盘、线缆与存储链路 |
| link is not ready | 网卡链路未就绪 | 检查物理连接与网卡配置 |
| Call Trace | 内核调用栈 | 结合上下文定位触发路径 |
| soft lockup | 某处理器长时间被占用 | 结合负载与驱动版本分析 |
| EXT4-fs error | 文件系统报错 | 优先保护数据,安排检查修复 |
缓冲区容量有限,新的内核消息会覆盖旧记录,重启后内容也会清空。要查更早的内核日志必须依赖日志服务的落盘数据,否则关键线索可能在重启后消失。
普通用户看不到内核日志时,先确认是不是访问限制导致的:系统可以通过内核参数限制读取权限。此时不要误判为「没有记录」,用具备权限的账号复核一次;排查硬件与驱动问题时优先看错误级别,再决定是否展开全量。