游乐游手机版
首页/系统平台/文章详情

Linux使用vmstat查看系统上下文切换的详细步骤教程

时间:2026-06-22 11:13
vmstat的cs列显示每秒上下文切换次数,需观察10秒以上并结合r、b、in列分析。高cs可能源于CPU竞争、中断风暴或I O等待。vmstat的cs包含中断切换,大于pidstat统计的进程切换。定位根因需使用pidstat等工具进一步诊断。

运维排查中遇到服务器卡顿,很多人的第一反应是查看 CPU 使用率。但真正经验丰富的工程师都知道,上下文切换频率往往比 CPU 利用率更能暴露系统瓶颈。而查看这一指标,最趁手的工具莫过于 vmstat——无需额外安装,一行命令就能将关键数据呈现在你面前。

Linux怎么使用vmstat查看系统上下文切换

直接运行 vmstat 1 就能看到 cs 值

无需安装软件包,也不需要 root 权限,vmstat 是绝大多数 Linux 发行版默认预装的性能分析工具。执行 vmstat 1 后,输出信息中第三行(system 模块)最右侧的 cs 列显示的就是「每秒上下文切换次数」——它并非瞬时值,而是本次采样周期(1 秒)内的平均速率。

不少初学者容易在这里踩坑:以为 vmstat -S Mvmstat -S K 能改变 cs 的单位,实际上这两个参数仅影响内存列(如 freebuff),对 csin 这类计数字段完全没有影响。它们的单位始终是「次/秒」,无需额外换算。

  • 系统刚启动时,cs 短暂跃升至 5k–8k 属于正常现象——例如 systemd 拉起服务、日志刷盘等操作都会引发一波上下文切换。
  • 空闲系统的典型参考范围:1000–1500 /秒;如果持续超过 5000 /秒,就需要引起警惕了。
  • 切勿仅凭单次输出就匆忙下结论——建议至少观察 10 秒以上,重点识别是否存在脉冲式飙升(比如周期性冲到 20k+ 后又回落),这种模式通常指向某些定时任务或中断抖动。

cs 值偏高但找不到根因?必须联动分析 rbin

单独看到 cs=12000 几乎无法说明问题,真正有价值的是这四列的组合关系,它能直接告诉你上下文切换的“性质”:

  • r > CPU 核数(例如 4 核机器上 r ≥ 5)并且 cs 也很高 → 说明 CPU 资源竞争激烈,大量属于非自愿切换(nvcswch/s 主导),进程被调度器强制赶下 CPU。
  • b > 0cs 中等偏高 → 进程卡在不可中断睡眠状态(常见于磁盘 I/O、锁等待),频繁挂起与唤醒,这种情况下自愿切换(cswch/s)占主导地位。
  • incs 同步飙升(比如都从 300 跃升到 9000)→ 这是典型的中断风暴,可能由网卡软中断、定时器或 NVMe 驱动异常引发。
  • cs 偏高但 ussy 都偏低 → 上下文切换并非因计算密集引起,而是进程在等待资源(锁、网络、磁盘),此时 %wabi/bo 往往也居高不下。

为什么 vmstatcspidstat -w 加起来对不上

这个问题几乎每个深入做过性能分析的工程师都会遇到。原因其实很简单:vmstat 统计的是内核全局视角的上下文切换总数,它包含三类开销:

  • 进程/线程级切换(用户态任务之间的切换)
  • 硬件中断处理时的上下文保存与恢复(例如网卡收包触发的 eth0 中断)
  • 软中断上下文切换(如 ksoftirqd 处理网络协议栈、定时器)

pidstat -w 只抓取每个进程的 cswch/s(自愿切换)和 nvcswch/s(非自愿切换),它并不统计中断相关的部分。因此 vmstat cs 一定 ≥ 所有进程 cswch/s + nvcswch/s 的总和——这不是 bug,而是设计如此,明白了这个原理就不会再感到困惑了。

举个例子:如果 cs=6000in=5800,那么其中大约 5800 次切换与你的应用进程无关,纯粹是中断处理带来的开销。

别被 cs 数值带偏,真正的问题往往藏在 pidstat -w

vmstat 的作用就像体检报告中的血常规——它告诉你“存在异常”,但想要定位“是谁导致的”以及“为什么切换”,必须借助 pidstat -w 这把手术刀:

  • 首次运行 pidstat -w 1 输出的是累计值,第二次才开始计算增量速率,因此务必连续观察两轮以上,否则第一行数据可能会误导你。
  • cswch/s 偏高 + nvcswch/s ≈ 0 → 进程主动让出 CPU,此时可以使用 strace -p PID -e trace=epoll_wait,read,futex 检查它卡在哪些系统调用上。
  • nvcswch/s 偏高 → 调度器强制抢占,应优先排查是否存在 rogue 实时进程(用 ps -eo pid,cls,rtprio,ni --sort=-rtprio 扫描一遍),或者 Java GC 过于频繁、线程数远超 CPU 核数。
  • 进程状态为 D(不可中断睡眠)时,pidstat -w 完全不会显示它——此时需使用 ps -o pid,comm,state,wchan -p PID 查看它卡在哪个内核函数中。

说到底,真正困难的不是看到 cs 偏高,而是分清它究竟是症状还是病因。vmstat 是筛子,pidstat 才是手术刀。只有将两者配合使用,才能把系统问题的本质真正挖掘出来。

来源:https://www.php.cn/faq/2678130.html
上一篇如何在银河麒麟系统中用命令行挂载U盘教程 下一篇Mac彻底卸载软件的完整教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
微软详解Win11时间点还原 默认每24小时创建恢复点
系统平台 · 2026-06-30

微软详解Win11时间点还原 默认每24小时创建恢复点

微软今日推送了最新的 6 月可选更新,并发布博客详细解读了 Win11 全新的“时间点还原”(Point-in-time restore)功能——这一功能本质上是对系统恢复体验的一次全面升级,旨在让用户更轻松地应对电脑故障。 微软表示,面向 Windows 11 客户端用户的“时间点还原”功能现已正

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验
系统平台 · 2026-06-30

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验

微软今天推送了Windows 11 26H1设备的6月可选更新KB5095091,安装完成后系统版本号会升级到Build 28000 2340。值得一提的是,这次更新并非面向所有设备,而是专门为搭载高通骁龙X2系列芯片的机型准备的——包括骁龙X2 Plus、X2 Elite和X2 Elite Ext

Win11六月可选更新KB5095093修复回收站弹窗异常
系统平台 · 2026-06-30

Win11六月可选更新KB5095093修复回收站弹窗异常

微软已悄然推送Windows 11六月可选更新,编号KB5095093。本次更新覆盖两个版本:24H2用户安装后版本号升级至Build 26100 8737,而25H2用户则更新至Build 26200 8737。 本次更新并非仅是小修小补,而是带来了多项实质性新功能。下面我们就来详细解析这些更新内

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞
系统平台 · 2026-06-30

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞

科技媒体 Cult of Mac 昨日(6月23日)发布博文指出,苹果在 macOS 27 Beta 2 更新中悄然封堵了一个此前可用的后门——用户曾能通过一条终端命令绕过候补名单,直接启用新版 Siri AI,如今这一方法已失效。 简要回顾一下:在 macOS 27 Beta 1 阶段,只需在 M

微软加速Win11 25H2推送 覆盖所有符合条件家用PC
系统平台 · 2026-06-30

微软加速Win11 25H2推送 覆盖所有符合条件家用PC

近日(6月23日),科技媒体 Windows Latest 发布了一则值得关注的动态:微软已进一步扩大 Windows 11 25H2 的推送范围,所有满足硬件要求、且不受 IT 部门管理的家庭版和专业版设备,现在均可顺利接收本次更新。 此次升级有一个显著特点——采用“启用包”(eKB)方式进行推送