怎样通过dmesg日志监控磁盘I/O

在Linux系统运维和性能调优中,dmesg(即 display message 或 driver message)是一个绕不开的命令。它就像一个系统内核的“黑匣子”,忠实地记录着自启动以来的各种内核消息和错误。当磁盘I/O出现性能瓶颈或潜在问题时,dmesg日志往往是第一个能提供线索的地方。
那么,具体该如何利用这个工具来监控磁盘I/O呢?下面是一套清晰的操作指南。
1. 打开终端
一切操作都从终端开始。这是与Linux系统内核直接对话的窗口。
2. 查看实时日志尾部
直接输入dmesg会输出海量信息,通常我们更关心最近发生了什么。这时,可以结合tail命令:
dmesg | tail
这个命令会显示日志的最后几行。如果觉得信息不够,可以调整tail的参数,比如tail -20来显示最后20行。
3. 精准筛选磁盘相关消息
日志信息繁杂,我们需要“精确制导”。使用grep命令进行过滤是标准做法。
例如,想查看所有与SATA磁盘相关的内核消息,可以输入:
dmesg | grep -i sata
同理,对于IDE接口的磁盘,命令则是:
dmesg | grep -i ide
这里的-i参数代表忽略大小写,确保不漏掉任何相关信息。
4. 开启实时监控模式
有时候,我们需要“盯紧”系统,实时捕捉动态。可以将grep和tail -f(follow)命令组合起来:
dmesg | grep -i sata | tail -f
执行这个命令后,终端就会持续输出并刷新与SATA相关的日志,直到你按下Ctrl+C中断。这对于追踪间歇性发生的I/O问题非常有效。
5. 按时间范围查询历史记录
问题可能发生在过去某个特定时段。幸运的是,dmesg支持基于时间戳的查询。例如,要查看2021年10月1日之后的所有内核消息,命令如下:
dmesg --since “2021-10-01”
这个功能在回溯分析几天甚至几周前发生的异常时,能帮上大忙。
6. 从日志中解读I/O性能指标
查看消息只是第一步,关键是从中解读出性能信号。在dmesg的输出中,可以重点关注以下几类指标:
- 磁盘读写速度:留意
kB_read/s和kB_wrtn/s这类字段,它们直观反映了瞬时的吞吐量。 - 累计读写量:
kB_read和kB_wrtn字段则显示了自统计开始以来的数据总量,有助于评估负载规模。 - I/O等待时间:
await字段至关重要,它反映了每个I/O请求的平均等待时间(包括队列等待和服务时间)。这个值如果持续偏高,通常就是磁盘响应变慢的直接证据。
话说回来,dmesg日志信息量巨大,分析和理解确实需要一些经验。另外,必须明确它的主要定位:故障排查和事后性能分析,而非严格的实时监控工具。
如果你需要对磁盘I/O进行持续的实时监控,获取更连续、更体系化的性能数据,那么专业的工具会是更好的选择。例如:
iostat:提供详细的CPU统计和所有设备的I/O统计报告。iotop:类似于top命令,但专门用于监视磁盘I/O,可以按进程排序。vmstat:报告关于进程、内存、分页、块I/O、陷阱和CPU活动的信息。
将这些工具与dmesg结合使用,才能构建起从宏观到微观、从实时到历史的完整磁盘I/O监控视野。
