Linux vmstat 命令
什么是 vmstat 命令
vmstat(Virtual Memory Statistics)是 Linux 系统上一个功能强大的性能监控工具,它能够实时报告系统的进程、内存、交换分区、I/O 块和 CPU 活动等关键性能指标。
核心功能
- 内存监控:显示物理内存和交换空间的使用情况
- CPU 使用率:展示用户进程、系统进程和空闲时间的占比
- 进程状态:报告运行中、等待和阻塞的进程数量
- I/O 统计:提供块设备读写操作的详细信息
基本语法与常用参数
基本语法格式
vmstat [选项] [时间间隔] [次数]
常用参数说明
参数 | 说明 |
---|---|
-a |
显示活跃和非活跃内存 |
-d |
显示磁盘统计信息 |
-p |
显示指定磁盘分区的统计信息 |
-s |
显示内存相关统计信息的汇总 |
-m |
显示 slab 信息 |
-t |
在输出中增加时间戳 |
-S |
指定单位显示(k/K/m/M,分别代表 1000/1024/1000000/1048576) |
输出字段详解
执行 vmstat
命令后,输出通常分为以下几个部分:
1. 进程信息
procs r: 运行队列中的进程数量 b: 等待 I/O 的进程数量
2. 内存信息
memory swpd: 使用的虚拟内存大小(KB) free: 空闲的物理内存大小(KB) buff: 用作缓冲区的内存大小(KB) cache: 用作缓存的内存大小(KB)
3. 交换分区信息
swap si: 每秒从磁盘读入交换区的内存大小(KB/s) so: 每秒写入磁盘的交换区内存大小(KB/s)
4. I/O 信息
io bi: 每秒从块设备接收的块数(blocks/s) bo: 每秒发送到块设备的块数(blocks/s)
5. 系统信息
system in: 每秒中断数(包括时钟中断) cs: 每秒上下文切换次数
6. CPU 使用率
cpu us: 用户进程占用 CPU 时间百分比 sy: 系统进程占用 CPU 时间百分比 id: 空闲 CPU 时间百分比 wa: 等待 I/O 的 CPU 时间百分比 st: 被虚拟机偷取的时间百分比
实用示例解析
示例 1:基本监控(每 2 秒刷新一次)
实例
vmstat 2
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 123456 78900 456789 0 0 5 12 345 6789 10 5 85 0 0
示例 2:显示磁盘统计信息
实例
vmstat -d
输出将显示每个磁盘的读写统计,包括读/写次数和扇区数。
示例 3:带时间戳的监控(每 5 秒一次,共 3 次)
实例
vmstat -t 5 3
输出会在每行前添加时间戳,便于记录和分析。
性能问题诊断指南
1. CPU 瓶颈判断
- us 值高:用户进程消耗大量 CPU,可能需要优化应用程序
- sy 值高:系统内核消耗大量 CPU,可能系统调用过多
- wa 值高:I/O 等待时间长,可能是磁盘瓶颈
2. 内存问题诊断
- si/so 持续不为 0:表示系统在使用交换分区,物理内存可能不足
- free 值持续减少:可能内存泄漏
3. 进程阻塞问题
- b 列数值大:表示多个进程在等待 I/O 操作
最佳实践建议
- 监控周期选择:生产环境建议 5-10 秒间隔,避免影响系统性能
- 长期监控:结合
nohup
将输出重定向到文件nohup vmstat 10 360 > vmstat.log &
- 综合分析:结合
top
、iostat
等工具一起使用 - 基准测试:系统正常时记录基准数据,便于异常时对比
常见问题解答
Q1: vmstat 和 top 命令有什么区别?
top
提供进程级别的详细信息vmstat
提供系统整体资源使用情况的概览
Q2: si/so 值很高说明什么?
表示系统频繁使用交换分区,可能是物理内存不足,建议增加内存或优化应用程序内存使用。
Q3: 如何监控特定磁盘?
使用 -p
参数指定磁盘分区:
实例
vmstat -p /dev/sda1
通过掌握 vmstat 命令,您将能够快速诊断 Linux 系统的性能瓶颈,为系统优化提供数据支持。建议在实际工作中结合其他监控工具一起使用,以获得更全面的系统性能视图。
点我分享笔记