如何通过分析dmesg日志中的细节来显著提升CentOS系统的稳定性和可靠性?
- 内容介绍
- 文章标签
- 相关推荐
按理说,

为什么 dmesg 日志是提高 CentOS 稳定性的主要手段?
程序崩溃往往源于内核层面的隐患——硬件错误、驱动冲突、内存泄漏或异常中断。dmesg 能够直接暴露这些底层信息,却常被管理员忽视。因为:
- 日志体积庞大开机后数十万行信息堆积,肉眼查找几乎不可能。
- 缺少可读时间戳原始输出只显示内核 ticks,难以与业务事件对应。
- 担心命令不可用部分最小化镜像或老旧版本可能未安装 util‑linux 包。
- 重启后信息丢失: 内核环形缓冲区会被覆盖,故障现场难以复现。
针对以上痛点。下面提供一套从基础到进阶的实操方案,方便你定位问题并通过持续监控明显提高程序稳定性和可靠性。
一、确保 dmesg 可用并掌握基本查看方式
痛点:找不到命令或担心误操作导致程序不稳。
-
rpm -qf /bin/dmesg检查所属包;若未安装则执行yum install -y util-linux或dnf install -y util-linux-user。怎么说呢, -
基本查看:
dmesg | less -
按错误级别过滤:
dmesg --level=err。warn -
保存全量日志以备离线分析:
dmesg> /var/log/dmesg_$.log
痛点:原始时间戳是内核 jiffies,无法直接关联业务日志或告警时间。
-
-T/--ctime: 转为人类可读的本地时间。老实说,$ dmesg -T | less $ dmesg -T --level=err | grep -i error -
<如果需要精确到毫秒,可配合 kernel 参数「printk.time=1」在 grub 中打开永久时间戳。>
痛点:日志文件超过十万行。肉眼滚动效率极低,
-
$ dmesg -T | grep -i --color=auto 'error\|fail\|warn\|invalid'
li$ watch -n 1 'dmesg -T | tail -20'&回车」即可跳转; 按 n/N 上下翻页,> li<结合 journalctl做互补验证: $ journalctl -k --since "1 hour ago" | grep -i error仅在故障后才查看 dmesg,导致损失已发生。
-
=* * * * * root /usr/bin/dmesg -T> /var/log/dmesg-baseline/$.log 2>&1 使用 rsync 或 lftp 把日志推送至中心服务器或对象存储。创建基线对比脚本:=#!/bin/bash BASELINE=/var/log/dges-baseline/$.log CURRENT=/var/log/dges-baseline/$.log diff -u $BASELINE $CURRENT \| grep ^ \| grep -v ^\+\\+\\+ \| grep -v ^\-{3}> /tmp/dges_diff_$.txt if;n mailx -s \" dmsg 新增异常 $\"=0 * * * * root /usr/local/bin/dges_baseline_check.sh 告警内容应包括:**错误类型**、**出现次数**、**首次出现时间**还有 **相关硬件标识**,便于快速定位根因。
- 典型特征
Out of memory: Kill process …,malloc failed。page allocation failure。- 处置
-
查询
/proc/meminfovmstatslabtop。 -
调整
vm.overcommit_memoryvm.min_free_kbytes或增加 swap。 - 对业务进行内存泄漏排查。
-
EXT4-fs error。I/O error,dev sda,ata1: hard resetting link.
smartctl -a /dev/sda 检测磁盘健康。fsck.ext4 -fy /dev/mapper/vg_root-lv_root。
按理说,

为什么 dmesg 日志是提高 CentOS 稳定性的主要手段?
程序崩溃往往源于内核层面的隐患——硬件错误、驱动冲突、内存泄漏或异常中断。dmesg 能够直接暴露这些底层信息,却常被管理员忽视。因为:
- 日志体积庞大开机后数十万行信息堆积,肉眼查找几乎不可能。
- 缺少可读时间戳原始输出只显示内核 ticks,难以与业务事件对应。
- 担心命令不可用部分最小化镜像或老旧版本可能未安装 util‑linux 包。
- 重启后信息丢失: 内核环形缓冲区会被覆盖,故障现场难以复现。
针对以上痛点。下面提供一套从基础到进阶的实操方案,方便你定位问题并通过持续监控明显提高程序稳定性和可靠性。
一、确保 dmesg 可用并掌握基本查看方式
痛点:找不到命令或担心误操作导致程序不稳。
-
rpm -qf /bin/dmesg检查所属包;若未安装则执行yum install -y util-linux或dnf install -y util-linux-user。怎么说呢, -
基本查看:
dmesg | less -
按错误级别过滤:
dmesg --level=err。warn -
保存全量日志以备离线分析:
dmesg> /var/log/dmesg_$.log
痛点:原始时间戳是内核 jiffies,无法直接关联业务日志或告警时间。
-
-T/--ctime: 转为人类可读的本地时间。老实说,$ dmesg -T | less $ dmesg -T --level=err | grep -i error -
<如果需要精确到毫秒,可配合 kernel 参数「printk.time=1」在 grub 中打开永久时间戳。>
痛点:日志文件超过十万行。肉眼滚动效率极低,
-
$ dmesg -T | grep -i --color=auto 'error\|fail\|warn\|invalid'
li$ watch -n 1 'dmesg -T | tail -20'&回车」即可跳转; 按 n/N 上下翻页,> li<结合 journalctl做互补验证: $ journalctl -k --since "1 hour ago" | grep -i error仅在故障后才查看 dmesg,导致损失已发生。
-
=* * * * * root /usr/bin/dmesg -T> /var/log/dmesg-baseline/$.log 2>&1 使用 rsync 或 lftp 把日志推送至中心服务器或对象存储。创建基线对比脚本:=#!/bin/bash BASELINE=/var/log/dges-baseline/$.log CURRENT=/var/log/dges-baseline/$.log diff -u $BASELINE $CURRENT \| grep ^ \| grep -v ^\+\\+\\+ \| grep -v ^\-{3}> /tmp/dges_diff_$.txt if;n mailx -s \" dmsg 新增异常 $\"=0 * * * * root /usr/local/bin/dges_baseline_check.sh 告警内容应包括:**错误类型**、**出现次数**、**首次出现时间**还有 **相关硬件标识**,便于快速定位根因。
- 典型特征
Out of memory: Kill process …,malloc failed。page allocation failure。- 处置
-
查询
/proc/meminfovmstatslabtop。 -
调整
vm.overcommit_memoryvm.min_free_kbytes或增加 swap。 - 对业务进行内存泄漏排查。
-
EXT4-fs error。I/O error,dev sda,ata1: hard resetting link.
smartctl -a /dev/sda 检测磁盘健康。fsck.ext4 -fy /dev/mapper/vg_root-lv_root。

