260112-Linux-vmstat查看系统上下文切换是否正常

linux vmstat 1 如何查看线程上下文切换 是否正常 4核8GB的Ubuntu20.04系统

vmstat 1 输出中,cs 列 表示每秒上下文切换次数,结合 4 核 8GB Ubuntu 20.04 系统,判断方法如下:

1. 核心指标:cs 列数值

1
vmstat 1

输出示例:

plaintext

1
2
3
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 329452 81560 583244 0 0 0 1 112 234 1 1 98 0 0
  • cs:每秒上下文切换次数

2. 正常范围参考

系统负载状态 正常 cs 值范围
轻负载(无高并发进程) 几百~几千
中负载(常规服务运行) 几千~几万
高负载(高并发 / 多线程程序) 几万~几十万(需结合其他指标)

4 核 8GB Ubuntu 20.04:无高并发服务时,cs 稳定在 1000 以内 属正常;运行 Web / 数据库等服务,cs 几万内且无性能卡顿也可接受。

3. 异常判断 & 排查

(1)异常信号

  • cs 数值 突然飙升(如从几千涨到几十万)
  • 伴随 %us(用户 CPU)/ %sy(内核 CPU)升高、r(等待运行进程数)持续大于核数

(2)排查工具

1
2
3
4
5
# 1. 查看进程上下文切换详情(cswch自愿,nvcswch非自愿)
pidstat -w 1

# 2. 查看线程级别上下文切换
pidstat -wt 1

4. 关键结论

cs 无绝对 “正常值”,核心看 是否稳定 + 是否伴随性能问题(卡顿、延迟高)。4 核 8GB 系统,无高并发时 cs
过高(如几十万)大概率异常,需排查多线程程序或系统瓶颈~

sudo vmstat 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
53 0 1280 172096 53668 2899092 0 0 0 0 4590 16048 91 6 3 0 0
70 0 1280 177264 53668 2899464 0 0 0 0 4925 14850 92 6 2 0 0
63 0 1280 187488 53668 2899124 0 0 0 0 4414 14884 90 7 2 0 0
70 0 1280 176072 53668 2900104 0 0 0 0 4490 15137 92 6 3 0 0
70 0 1280 179400 53676 2894888 0 0 0 28 4790 15637 89 8 4 0 0
46 0 1280 172116 53676 2895848 0 0 0 14940 4193 13649 91 6 2 0 0
70 0 1280 182940 53676 2896604 0 0 0 0 4455 14426 91 7 3 0 0
71 0 1280 177308 53676 2896372 0 0 0 0 5094 14102 92 7 1 0 0
74 0 1280 180472 53676 2896664 0 0 0 0 4543 13903 92 6 3 0 0
70 0 1280 182832 53684 2896832 0 0 0 52 4816 14569 89 8 3 0 0
70 0 1280 185948 53684 2896720 0 0 0 52 4701 13914 92 7 2 0 0
123 0 1280 176496 53684 2897016 0 0 0 0 4412 13588 91 8 2 0 0
70 0 1280 178112 53684 2897772 0 0 0 0 4518 13660 91 7 1 0 0