常见命令-资源查看-vmstat命令实践

一、系统性能瓶颈定位

  1. CPU 瓶颈分析
    关键指标
    us(用户态CPU占比):持续高于 70% 表明用户进程负载过高,需优化代码或增加CPU资源。
    sy(内核态CPU占比):过高(如 >30%)提示系统调用频繁,可能由IO密集操作或内核锁竞争引起。
    r(运行队列进程数):若超过 CPU 核数 2 倍,说明存在 CPU 调度瓶颈。
    操作示例

    vmstat 1 5  # 每秒采样一次,共5次,观察CPU波动
    
  2. 内存不足与交换活动监控
    关键指标
    si(swap-in)和 so(swap-out):若长期 >0,表明物理内存不足,系统频繁使用交换分区。
    free(空闲内存):结合 buff/cache 判断可用内存是否充足(理想值应占总量 20% 以上)。
    典型场景
    ◦ 内存泄漏时,free 持续下降,si/so 逐渐升高,需结合 top 定位高内存进程。

  3. 磁盘 I/O 瓶颈排查
    关键指标
    bi(块设备读速率)和 bo(块设备写速率):若持续 >1000(单位:块/秒),可能磁盘负载过高。
    wa(IO等待CPU占比):>20% 表明磁盘成为瓶颈,需优化存储或升级硬件。
    扩展操作

    vmstat -d  # 查看详细磁盘IO统计
    

二、故障排查与调优

  1. 上下文切换与中断分析
    关键指标
    cs(上下文切换次数):过高(如 >10万/秒)可能因进程/线程过多,需减少并发或优化锁机制。
    in(中断次数):异常升高可能由硬件故障或驱动问题导致。
    调优示例
    ◦ Web服务器(如 Nginx)调整 worker 进程数,使 cs 降至合理范围。

  2. 虚拟化环境性能监控
    关键指标st(虚拟机 CPU 被宿主机抢占时间占比),若 >5% 需扩容 vCPU 或迁移负载。
    场景示例

    vmstat 1 | awk '{print $16}'  # 持续监控虚拟化环境中的st值
    
  3. 僵尸进程与阻塞进程检测
    关键指标
    b(不可中断睡眠进程数):长期 >0 可能因磁盘故障或NFS挂载问题。
    关联命令

    ps aux | grep 'D'  # 查看具体阻塞进程
    

三、自动化监控与资源规划

  1. 定时性能采样
    批处理模式

    vmstat 2 10 > vmstat.log  # 每2秒采样,共10次,输出到日志
    

    数据聚合:结合脚本提取关键指标(如 uswa),用于生成趋势报表或触发告警。

  2. 容量规划参考
    长期监控:通过 vmstat -s 查看内存总量、交换活动等历史统计,为扩容提供依据。
    示例指标
    ◦ 若 swpd(已用交换分区)长期 >10%,需增加物理内存。


四、与其他工具的联动分析

  1. 综合性能诊断
    • 结合 iostat 分析磁盘吞吐,或 sar 查看历史负载,形成完整性能画像。
  2. 容器化环境适配
    • 在容器内运行 vmstat 时,需注意其反映的是宿主机的全局资源视图,容器资源限制需通过 cgroup 接口获取。

五、运维速查表

场景 关键指标 阈值参考 调优建议
CPU 过载 us >70%r >2*核数 增加 CPU 或优化代码 限制进程优先级(nice
内存不足 si/so >0 扩容内存 优化应用内存管理或启用大页
磁盘 IO 瓶颈 bi/bo >1000wa >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时间。

关键场景解读

  1. CPU瓶颈
    r > CPU核心数us + sy > 90%:CPU过载,需优化进程或扩容。
    wa > 20%:磁盘响应慢,检查bi/bo确认I/O压力,考虑使用SSD或调整RAID策略。

  2. 内存不足
    si/so > 0free持续下降:物理内存不足,触发换页,需增加内存或终止内存泄漏进程。

  3. 上下文切换过高
    cs > 100,000/秒:大量进程竞争CPU,减少线程数或使用协程优化。

  4. 缓存利用分析
    cache占用高但free低:系统有效利用内存缓存文件,非内存不足,无需干预。

posted @ 2025-03-13 13:09  天天向上327  阅读(131)  评论(0)    收藏  举报