pidstat 切换分析是什么
pidstat 属于 sysstat 工具集,加上 -w 选项后按进程或线程统计上下文切换:cswch/s 是自愿切换速率,nvcswch/s 是被抢占的非自愿切换速率。它把系统级的切换总量细化到具体进程,是回答「谁在疯狂切换」的直接工具。配合 -t 选项可以展开到线程维度,这对多线程应用尤其重要:一个进程的总量可能由其中某个线程贡献。
基本信息
| 命令 | pidstat -w [间隔] [次数],sysstat 软件包提供 |
|---|---|
| 关键列 | cswch/s 自愿切换,nvcswch/s 非自愿切换 |
| 常用选项 | -w 切换统计,-t 线程维度,-u 同时显示 CPU 使用率 |
| 适用平台 | Linux,多数发行版需单独安装 sysstat |
| 数据来源 | 进程与线程的累计计数差值 |
| 判读顺序 | 先看总量异常,再按进程与线程排名定位 |
典型使用场景
- 定位切换大户:系统级切换量突增时找出具体进程
- 多线程排查:用线程维度确认是哪一个工作线程在频繁切换
- 锁竞争分析:自愿切换偏高的进程往往存在锁等待
- 过度并发评估:非自愿切换偏高说明线程数超出核数承载能力
- 压测复盘:把切换曲线与吞吐、延迟曲线对齐分析
常用采样
常用采样
pidstat -w 1 3 # 进程级切换速率
pidstat -wt 1 3 | head -40 # 线程维度,定位到具体线程
pidstat -wu 1 3 # 同时看 CPU 使用率
pidstat -w -p 12345 1 3 # 只盯一个进程
vmstat 1 3 # 系统级对照:cs 列与 r 队列两列切换读法
| 指标 | 含义 | 对应根因 |
|---|---|---|
| cswch/s | 自愿切换:任务主动让出 CPU | 等锁、等 I/O、睡眠唤醒频繁 |
| nvcswch/s | 非自愿切换:被调度器抢占 | CPU 争抢激烈,线程数明显超过核数 |
| 两列都高 | 等待与争抢并存 | 需要同时优化并发模型与资源配额 |
| 数值平稳 | 调度行为稳定 | 切换不是当前瓶颈,转向其他指标 |
采样时长要覆盖问题窗口:均值会稀释短时尖峰。如果问题只在特定时段出现,应把采样安排在那个时段,或提高采样频率后筛选峰值。
看不到目标进程时先确认观察位置:在容器命名空间内采样与在宿主维度采样看到的进程集合不同,容器化环境中这一点尤其容易混淆。