vmstat性能测试中需要特别关注的指标和分析思路
vmstat 实际应用示例输出的详细字段解释,以及在性能测试中需要特别关注的指标和分析思路。结合具体场景和关键值,可以快速判断系统瓶颈。
示例 1:基础监控 (vmstat 1 5)
每秒收集一次,共5次。输出如下(数值仅供参考):
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 1 1024 104856 51200 256000 0 0 12 24 450 890 20 10 65 5 0
1 0 1024 104000 51200 256500 0 0 0 8 220 600 15 8 75 2 0
... (后续3次输出)
字段解析
-
Procs (进程)
-
r (Running)
当前等待 CPU 资源的进程数。- 关注点:
如果持续大于 CPU 核心数(如 CPU 是4核,r > 4),表明 CPU 资源紧张,可能存在计算密集型任务堆积。
- 关注点:
-
b (Blocked)
处于不可中断睡眠状态的进程数(通常是等待 I/O 完成)。- 关注点:
如果持续大于0,说明系统有进程因磁盘或网络 I/O 阻塞。结合wa(CPU 等待 I/O)字段进一步分析。
- 关注点:
-
-
Memory (内存)
-
swpd
已使用的虚拟内存(交换空间)大小(KB)。- 关注点:
若swpd > 0但si(Swap In)和so(Swap Out)为0,说明此前发生过内存不足,但当前可能缓解。
若si或so持续大于0,表明系统正在频繁使用交换空间,物理内存不足。
- 关注点:
-
free
空闲物理内存(KB)。- 关注点:
Linux 会尽量利用空闲内存作为缓存,free低但cache高是正常现象,无需立即担心。
- 关注点:
-
buff
缓冲区内存(KB),用于缓存磁盘块(如文件系统元数据)。 -
cache
页面缓存(KB),缓存文件数据(如读取过的文件)。
-
-
Swap (交换分区)
-
si (Swap In)
每秒从磁盘加载到内存的数据量(KB)。- 关注点:
高si表示系统在从交换分区读取数据,可能因物理内存不足触发了页面换入操作。
- 关注点:
-
so (Swap Out)
每秒从内存换出到磁盘的数据量(KB)。- 关注点:
高so表示内存压力大,页面被换出到磁盘。若长时间si/so持续大于0,需增加物理内存或优化应用内存使用。
- 关注点:
-
-
I/O (磁盘)
-
bi (Blocks In)
每秒从块设备(磁盘)读取的块数(块大小通常为 512B)。- 关注点:
高bi可能是数据库查询、日志读取等操作导致。结合wa(CPU等待I/O时间)判断是否瓶颈在磁盘。
- 关注点:
-
bo (Blocks Out)
每秒写入块设备(磁盘)的块数。- 关注点:
高bo可能是写入日志、数据持久化操作。若bo和wa同时高,需优化磁盘写入策略(如异步写入)。
- 关注点:
-
-
System (系统)
-
in (Interrupts)
每秒中断次数(包括时钟中断、硬件设备中断)。- 关注点:
突然大幅增加可能表示硬件问题(如网卡故障)或驱动异常。
- 关注点:
-
cs (Context Switches)
每秒上下文切换次数(CPU 从一个进程切换到另一个进程)。- 关注点:
高cs(如 >100,000)可能因频繁的线程调度或锁争用,需检查进程/线程数量或调整内核调度策略。
- 关注点:
-
-
CPU (处理器)
-
us (User Time)
用户态进程消耗的 CPU 时间百分比(应用程序代码执行)。- 关注点:
高us(如 >70%)表示用户程序繁忙,可能是计算密集型任务(如数据处理、加密)。
- 关注点:
-
sy (System Time)
内核态 CPU 时间百分比(系统调用、中断处理、内核线程)。- 关注点:
高sy(如 >30%)可能因频繁的系统调用(如文件操作)或进程创建。需排查是否有系统调用滥用(如短时频繁open/close文件)。
- 关注点:
-
id (Idle)
CPU 空闲时间百分比。 -
wa (I/O Wait)
CPU 等待 I/O 完成的空闲时间百分比。- 关注点:
高wa(如 >20%)表明磁盘或网络 I/O 成为瓶颈。需结合bi/bo和b(阻塞进程数)进一步确认。
- 关注点:
-
st (Steal Time)
虚拟机被宿主机“偷取”的 CPU 时间百分比(仅在虚拟化环境有意义)。- 关注点:
高st(如 >10%)表示宿主机资源不足,虚拟机抢不到 CPU 资源。
- 关注点:
-
示例 2:磁盘监控 (vmstat -d)
输出示例(针对磁盘sda):
disk- ------------reads------------ ------------writes----------- -----IO-------
total merged sectors ms total merged sectors ms cur sec
sda 12000 400 614400 8000 5000 200 256000 4500 0 5
关键字段解析
- reads 相关:
- total:完成的读操作总数。
- sectors:读取的扇区总数(1扇区=512B)。
- ms:读操作耗时(毫秒)。
- writes 相关:
- 字段含义同上,针对写操作。
- IO 队列:
- cur:当前正在进行的 I/O 操作数量。
- sec:I/O 操作耗时(秒)。
性能关注点
- 若某磁盘的
cur值持续大于0,且sec较高,表明该磁盘存在排队延迟。 - 高
ms或sec表示磁盘响应慢,可能是硬件性能不足或负载过高。
示例 3:内存事件汇总 (vmstat -s)
输出示例:
4096 M total memory
1024 M used memory
...
1000 swaps in
200 swaps out
关键字段
- total memory:系统物理内存总量。
- swaps in/out:历史累计的交换分区使用次数。
- 非活跃内存(inact):可以被回收的内存(
vmstat -a输出)。
性能关注点
- 对比
total memory和used memory判断物理内存是否充足。 - 如果
swaps in/out持续增长且si/so(动态输出)不为0,必须优化内存使用或扩容。
性能测试关键关注点
-
CPU 瓶颈
- 检查
us和sy:若两者之和接近 100%(如us=70%,sy=25%),说明 CPU 是瓶颈。 - 配合
r值:若r≥ CPU 核心数,需优化代码或增加 CPU。
- 检查
-
内存瓶颈
si/so持续 >0:物理内存不足,优先减少缓冲或优化应用内存分配。cache高但free低:无需担心(Linux主动利用内存缓冲)。
-
I/O 瓶颈
wa>20% 且b>0:I/O 成为瓶颈,需检查磁盘读写速度(如iostat)或改用 SSD。bi/bo过高:判断是读密集还是写密集,优化程序 I/O 模式(如批量写入)。
-
进程阻塞
b持续 >0:检查等待 I/O 的进程(使用ps aux | grep 'D'查找状态为D的进程)。
-
上下文切换
cs过高:减少线程数或优化锁竞争(如使用无锁数据结构)。
解决思路
-
高 CPU (
us/sy):- 使用
perf或top找到高 CPU 进程。 - 优化算法或启用多线程/分布式计算。
- 使用
-
高 I/O 延迟 (
wa/bi/bo):- 使用
iostat -x 1查看磁盘await(平均等待时间)或%util(利用率)。 - 升级磁盘硬件或优化写入模式(如异步写入)。
- 使用
-
内存不足 (
si/so):- 使用
smem或ps查找内存泄漏进程。 - 调整应用内存配置或增加物理内存。
- 使用
通过 vmstat 的实时数据,结合 top、iostat、pidstat 等工具,可以形成完整的性能分析链路,精准定位系统瓶颈。
浙公网安备 33010602011771号