可用 sar -w 查历史上下文切换次数,需 sysstat 已安装启用;查今日数据用 sar -w -f /var/log/sa/sa29,时段筛选加 -s 和 -e 参数,关键指标为 pswitch(每秒任务切换数),异常值通常 >5000–10000。

直接用 sar -w 查历史上下文切换次数,前提是系统已启用 sysstat 日志采集。
确认 sysstat 是否已安装并启用
没装就运行:
yum install -y sysstat(CentOS/RHEL)或
apt install -y sysstat(Ubuntu/Debian)
安装后,默认会启用定时采集(通过 /etc/cron.d/sysstat),每 10 分钟执行一次 sa1 记录原始数据。若未生效,可手动启动:
systemctl enable --now sysstat
查指定日期的上下文切换历史
sar 把每日数据存为 /var/log/sa/saXX(XX 是日期,如 29 日对应 sa29)
要查今天(2026年7月29日)的上下文切换:
sar -w -f /var/log/sa/sa29
想看某一时段(比如上午 9:00 到 10:00):
sar -w -f /var/log/sa/sa29 -s 09:00:00 -e 10:00:00
输出中关键列是:
pswitch:每秒任务切换次数(即上下文切换总数)
pgmajfault:每秒大页缺页中断(间接反映内存压力引发的切换)
理解上下文切换是否异常
正常负载下,pswitch 值一般在几百到一两千之间;持续超过 5000–10000 次/秒需警惕。
常见诱因包括:
- 高频短生命周期进程(如大量 fork/exec)
- 锁竞争激烈(如多线程争抢同一 mutex)
- 中断风暴(网卡软中断频繁触发)
- 内存不足导致频繁换页(结合 sar -B 和 sar -r 交叉验证)
补查实时趋势辅助判断
如果历史数据不够细,可临时抓一段实时数据对比:
sar -w 1 60(每秒采样 1 次,持续 1 分钟)
再用 awk '{print $3}' | sort -n | tail -5 快速看最高几值
也可导出为文本便于绘图:
sar -w -f /var/log/sa/sa29 > ctx_switch_29.log











