Linux 性能监控工具 vmstat
vmstat 是 Linux 系统中的一个常用性能监控工具,全称是 Virtual Memory Statistics。它可以实时或定期报告系统的进程、内存、分页、块 I/O、陷阱(中断)和 CPU 活动等信息,帮助管理员快速定位系统性能瓶颈。
博主博客
基本语法
vmstat [选项] [时间间隔 [次数]]
- 时间间隔:每次刷新之间的秒数。
- 次数:总共刷新的次数。如果只指定间隔而不指定次数,则会一直循环刷新,直到手动终止(Ctrl+C)。
常用选项
| 选项 | 说明 |
|---|---|
-a |
显示活跃和非活跃内存(需要内核支持)。 |
-f |
显示系统启动后创建的进程总数(包括通过 fork、vfork、clone 等创建的)。 |
-s |
以表格形式显示内存统计信息(相当于从 /proc/meminfo 读取)。 |
-d |
显示磁盘读写统计。 |
-p <分区> |
显示指定分区的详细统计(如 vmstat -p /dev/sda1)。 |
-S <单位> |
指定输出的单位,如 k(KB)、m(MB),默认单位为 KB。 |
-t |
在输出末尾添加时间戳。 |
-w |
宽模式输出(保持列对齐,便于阅读)。 |
输出字段详解
执行 vmstat 不加参数会显示一次自启动以来的平均值。通常使用 vmstat 1 来每秒刷新一次。输出分为六大部分:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1. procs(进程)
- r:运行队列中的进程数(等待 CPU 的进程)。若长期大于 CPU 核数,说明 CPU 繁忙。
- b:处于不可中断睡眠状态的进程数(通常等待 I/O)。
2. memory(内存,单位 KB)
- swpd:已使用的虚拟内存大小(即被换出到交换分区的内存量)。
- free:空闲物理内存大小。
- buff:用作缓冲区的内存大小(缓存块设备元数据等)。
- cache:用作页缓存的内存大小(缓存文件内容)。
3. swap(交换分区)
- si:每秒从交换分区读入内存的数据量(swap in)。
- so:每秒从内存写入交换分区的数据量(swap out)。
如果si和so长期不为 0,说明物理内存不足。
4. io(块设备 I/O)
- bi:每秒从块设备接收到的块数(块读取)。
- bo:每秒发送到块设备的块数(块写入)。
这里的“块”大小取决于文件系统,通常为 1KB 或 4KB。
5. system(系统)
- in:每秒的中断次数,包括时钟中断。
- cs:每秒的上下文切换次数。如果过高,可能说明系统频繁切换进程,或线程过多。
6. cpu(CPU 使用率)
- us:用户空间占用 CPU 的百分比(包括 nice 时间)。
- sy:内核空间占用 CPU 的百分比。
- id:空闲 CPU 百分比。
- wa:等待 I/O 完成的 CPU 时间百分比。如果此值高,通常表示磁盘 I/O 慢。
- st:被虚拟机偷走的 CPU 时间(仅对虚拟机有意义)。
使用示例
1. 基本用法
vmstat 1 5
每秒刷新一次,共输出 5 次。这是最常用的监控方式。
2. 显示活跃/非活跃内存
vmstat -a 1
会多出 inact 和 active 两列,分别表示非活跃和活跃内存。
3. 查看磁盘统计
vmstat -d
输出每个磁盘的读写总数、合并次数、扇区数和耗时等信息。
4. 查看内存统计摘要
vmstat -s
以表格形式列出内存总量、使用情况、分页统计等。
5. 指定输出单位
vmstat -S m 1
以 MB 为单位显示内存相关数据。
输出解读示例
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 102456 14568 32084 198460 0 1 12 18 120 250 10 5 83 2 0
- r=2:有 2 个进程正在等待 CPU。
- b=0:没有进程在等待 I/O。
- swpd=102456:已使用约 100MB 交换空间。
- free=14568:剩余约 14MB 物理内存,较小。
- buff 和 cache:分别为 32MB 和 198MB。
- si/so=0/1:几乎无换页操作。
- bi/bo=12/18:磁盘读写量不大。
- in=120, cs=250:中断和上下文切换正常。
- us=10, sy=5, id=83, wa=2:CPU 大部分空闲,用户态占 10%,系统态占 5%,等待 I/O 仅 2%,系统负载较低。
如果发现 wa 较高(如超过 30%),且 b 列不为 0,则说明磁盘 I/O 可能是瓶颈。如果 r 长期大于 CPU 核数,且 us+sy 接近 100%,则 CPU 可能是瓶颈。
总结
vmstat 是一个轻量级且功能强大的系统性能分析工具。通过观察其输出的各项指标,可以快速判断系统是否存在 CPU 瓶颈、内存不足或 I/O 压力,是 Linux 运维和性能调优的必备命令之一。
Linux 性能监控工具 vmstat
https://blog.uso6.com/archives/linux-xing-neng-jian-kong-gong-ju-vmstat
评论