温馨提示×

如何解读linux内核日志

小樊
44
2026-09-08 11:39:30
栏目: 智能运维

解读 Linux 内核日志(kernel log)是排查系统故障、性能问题和硬件异常的重要手段。下面从日志来源、查看方式、常见格式、关键字含义、实战解读几个方面系统说明。


一、内核日志从哪里来

Linux 内核通过 printk() 输出日志,级别从低到高大致是:

级别 名称 含义
0 emerg 系统不可用
1 alert 必须立即处理
2 crit 严重错误
3 err 错误
4 warn 警告
5 notice 正常但重要
6 info 信息
7 debug 调试

二、如何查看内核日志

1. dmesg(最常用)

dmesg
dmesg | tail -n 50
dmesg -T        # 显示可读时间
dmesg -l err,warn

2. journalctl(systemd 系统)

journalctl -k           # 只看内核日志
journalctl -k -p err    # 错误级别
journalctl -k --since "10 min ago"

3. 日志文件

  • /var/log/dmesg
  • /var/log/messages(部分发行版)
  • /var/log/syslog(Debian/Ubuntu)

三、内核日志的基本格式

典型示例:

[    2.345678] EXT4-fs (sda1): mounted filesystem with ordered data mode
[    5.123456] eth0: link up, 1000 Mbps, full duplex
[  123.456789] Out of memory: Kill process 2345 (java)

说明:

  • 中括号 [时间]:系统启动后的秒数
  • 模块名(如 EXT4-fs, eth0):来源
  • 消息内容:具体事件

四、常见关键字与含义

1. 硬件相关

  • pci 0000:xx:PCI 设备枚举
  • usb 1-1:USB 设备
  • ata1.00:SATA 硬盘
  • nvme0:NVMe 磁盘

示例:

nvme nvme0: controller is down

→ NVMe 控制器异常,可能硬盘故障


2. 内存相关

Out of memory: Killed process 1234 (mysqld)

→ 内存耗尽,OOM Killer 杀进程

BUG: unable to handle page fault

→ 内核空指针或内存越界(严重 bug)


3. 文件系统

EXT4-fs error (sda1): ext4_find_entry: ...

→ 文件系统损坏

XFS (sdb): log I/O error

→ 磁盘 I/O 错误


4. CPU / 调度

soft lockup: CPU#3 stuck for 22s

→ CPU 软死锁(驱动或内核问题)

BUG: scheduling while atomic

→ 原子上下文调度错误(内核 bug)


5. 网络

eth0: link down

→ 网线断开

TCP: out of memory

→ 网络内存不足


五、实战解读示例

示例 1:系统卡死

[ 4521.12] INFO: task java:1234 blocked for more than 120 seconds
[ 4521.13] Call Trace:

→ 进程长时间阻塞(I/O 或锁问题)


示例 2:磁盘故障

[ 10.22] sd 0:0:0:0: [sda] Medium Error
[ 10.25] Buffer I/O error on dev sda1

→ 磁盘坏道或即将损坏


示例 3:驱动问题

[ 3.45] iwlwifi 0000:03:00.0: firmware crash

→ WiFi 驱动固件崩溃


六、排查建议流程

  1. 先用 dmesg -T | tail 看最近异常
  2. 按关键字过滤
    dmesg | grep -i error
    dmesg | grep -i oom
    
  3. 结合时间点对照系统行为
  4. 严重问题配合 journalctl 和硬件日志

如果你有具体的一段内核日志,可以直接贴出来,我可以帮你逐行解读并判断问题原因。

0