常见命令-资源查看-vmstat命令实践
一、系统性能瓶颈定位
-
CPU 瓶颈分析
• 关键指标:
◦us(用户态CPU占比):持续高于 70% 表明用户进程负载过高,需优化代码或增加CPU资源。
◦sy(内核态CPU占比):过高(如 >30%)提示系统调用频繁,可能由IO密集操作或内核锁竞争引起。
◦r(运行队列进程数):若超过 CPU 核数 2 倍,说明存在 CPU 调度瓶颈。
• 操作示例:vmstat 1 5 # 每秒采样一次,共5次,观察CPU波动 -
内存不足与交换活动监控
• 关键指标:
◦si(swap-in)和so(swap-out):若长期 >0,表明物理内存不足,系统频繁使用交换分区。
◦free(空闲内存):结合buff/cache判断可用内存是否充足(理想值应占总量 20% 以上)。
• 典型场景:
◦ 内存泄漏时,free持续下降,si/so逐渐升高,需结合top定位高内存进程。 -
磁盘 I/O 瓶颈排查
• 关键指标:
◦bi(块设备读速率)和bo(块设备写速率):若持续 >1000(单位:块/秒),可能磁盘负载过高。
◦wa(IO等待CPU占比):>20% 表明磁盘成为瓶颈,需优化存储或升级硬件。
• 扩展操作:vmstat -d # 查看详细磁盘IO统计
二、故障排查与调优
-
上下文切换与中断分析
• 关键指标:
◦cs(上下文切换次数):过高(如 >10万/秒)可能因进程/线程过多,需减少并发或优化锁机制。
◦in(中断次数):异常升高可能由硬件故障或驱动问题导致。
• 调优示例:
◦ Web服务器(如 Nginx)调整 worker 进程数,使cs降至合理范围。 -
虚拟化环境性能监控
• 关键指标:st(虚拟机 CPU 被宿主机抢占时间占比),若 >5% 需扩容 vCPU 或迁移负载。
• 场景示例:vmstat 1 | awk '{print $16}' # 持续监控虚拟化环境中的st值 -
僵尸进程与阻塞进程检测
• 关键指标:
◦b(不可中断睡眠进程数):长期 >0 可能因磁盘故障或NFS挂载问题。
• 关联命令:ps aux | grep 'D' # 查看具体阻塞进程
三、自动化监控与资源规划
-
定时性能采样
• 批处理模式:vmstat 2 10 > vmstat.log # 每2秒采样,共10次,输出到日志• 数据聚合:结合脚本提取关键指标(如
us、wa),用于生成趋势报表或触发告警。 -
容量规划参考
• 长期监控:通过vmstat -s查看内存总量、交换活动等历史统计,为扩容提供依据。
• 示例指标:
◦ 若swpd(已用交换分区)长期 >10%,需增加物理内存。
四、与其他工具的联动分析
- 综合性能诊断
• 结合iostat分析磁盘吞吐,或sar查看历史负载,形成完整性能画像。 - 容器化环境适配
• 在容器内运行vmstat时,需注意其反映的是宿主机的全局资源视图,容器资源限制需通过cgroup接口获取。
五、运维速查表
| 场景 | 关键指标 | 阈值参考 | 调优建议 |
|---|---|---|---|
| CPU 过载 | us >70%、r >2*核数 |
增加 CPU 或优化代码 | 限制进程优先级(nice) |
| 内存不足 | si/so >0 |
扩容内存 | 优化应用内存管理或启用大页 |
| 磁盘 IO 瓶颈 | bi/bo >1000、wa >20% |
升级 SSD 或 RAID | 调整文件系统挂载参数(如 noatime) |
| 虚拟化环境性能降级 | st >5% |
扩容 vCPU | 迁移虚拟机至负载较低的宿主机 |
| 上下文切换频繁 | cs >10万/秒 |
减少线程数 | 优化锁机制或进程调度策略 |
扩展选项
| 命令选项 | 用途 |
|---|---|
vmstat 2 5 |
每2秒采样一次,共5次。 |
vmstat -d |
显示磁盘详细I/O统计(包括分区级读写)。 |
vmstat -s |
输出内存事件总结(如页面换入/换出总数)。 |
vmstat -S M |
以MB为单位显示内存数据(避免KB单位数值过大)。 |
vmstat -a |
显示活跃/非活跃内存(用于NUMA架构分析)。 |
vmstat 输出字段说明
| 字段分类 | 字段名 | 详细解释 |
|---|---|---|
| Process | r |
运行队列中的进程数:等待CPU资源的进程数量。若持续超过CPU核心数,表明CPU饱和(如4核系统 r >4)。 |
b |
不可中断休眠进程数:因等待I/O或资源锁处于阻塞状态的进程数,突增可能表示磁盘或资源争用问题。 | |
| Memory | swpd |
已使用的交换内存(KB):数值持续增长需警惕物理内存不足,可能触发频繁换页。 |
free |
空闲物理内存(KB):结合buff/cache判断真实内存压力,Linux会利用空闲内存缓存数据。 |
|
buff |
缓冲区内存(KB):用于块设备(如磁盘)的临时数据缓存,加速读写操作。 | |
cache |
页缓存内存(KB):文件系统缓存,加速文件访问,可被快速释放供应用程序使用。 | |
| Swap | si |
每秒换入内存量(KB/s):从磁盘加载到交换区的数据量,非零表示物理内存不足。 |
so |
每秒换出内存量(KB/s):从交换区写回磁盘的数据量,与si同时非零需优先扩容内存。 |
|
| I/O | bi |
块设备接收量(KB/s):从磁盘读取的数据量,高值可能表明频繁读操作(如数据库查询)。 |
bo |
块设备发送量(KB/s):写入磁盘的数据量,高值可能因日志写入或缓存刷新导致。 | |
| System | in |
每秒中断次数:包括时钟中断和硬件中断,过高可能消耗CPU资源(结合sy分析)。 |
cs |
每秒上下文切换次数:进程或线程切换频繁会导致性能下降,需优化并发数或调度策略。 | |
| CPU | us |
用户态CPU使用率:应用程序代码消耗的CPU时间,长期高于70%需优化代码或升级硬件。 |
sy |
内核态CPU使用率:系统调用消耗的CPU时间,高于20%可能因频繁I/O或内核低效。 | |
id |
空闲CPU百分比:包含等待I/O的时间,高空闲但系统卡顿需检查I/O或内存瓶颈。 | |
wa |
等待I/O的CPU时间:高值(如>10%)表明磁盘是瓶颈,需优化存储或减少I/O操作。 | |
st |
虚拟机CPU窃取时间:仅虚拟化环境中有效,表示被宿主机或其他虚拟机占用的CPU时间。 |
关键场景解读
-
CPU瓶颈
•r > CPU核心数且us + sy > 90%:CPU过载,需优化进程或扩容。
•wa > 20%:磁盘响应慢,检查bi/bo确认I/O压力,考虑使用SSD或调整RAID策略。 -
内存不足
•si/so > 0且free持续下降:物理内存不足,触发换页,需增加内存或终止内存泄漏进程。 -
上下文切换过高
•cs > 100,000/秒:大量进程竞争CPU,减少线程数或使用协程优化。 -
缓存利用分析
•cache占用高但free低:系统有效利用内存缓存文件,非内存不足,无需干预。
浙公网安备 33010602011771号