linux查看进程列表 linux查看进程名字
0
2026-05-31
超过1000次/秒的上下文切换(cs)是大多数稳定服务出现调度压力的临界信号;vmstat的cs列反映系统级管理层,含进程、中断及软中断切换,无法定位具体进程或仅区分主动/非主动切换,须结合pidstat -w、r/b/in等指标综合判断。

超过1000 次/秒的上下文切换(cs)就该觉醒——这不是“高不高”的问题,而是大多数稳定服务开始出现调度压力的临界信号;但单看这个数字没用,必须拆到进程级、分清自愿/非自愿,否则你永远在修改表象。vmstat 的 cs 列只告诉你“有没有事”,不告诉你“谁干的”
vmstat 1 输出里的 cs 是系统全局内部上下文切换总次数,它包含:进程/线程切换、上下文切换、软中断上下文。这意味着:cs高≠进程写得烂——可能是中断迭代触发5000次软(在同步峰值中),vmstat照样计入 cscs 和 pidstat -w 的和对不上,近期只统计用户态进程的主动/非主动切换,不执行vmstat 1时看到 cs=8600,不代表持续高压——要连续观察10秒以上,看是否脉冲式跳变(如周期性冲到20k+后回落)若r > CPU核数且cs > 5000,优先怀疑CPU竞争;若b > 0且cs剩余,大部分概率是硬盘或锁卡住进程,导致反复挂起/唤醒用pidstat -w 定位高切换进程,但必须带采样间隔
pidstat -w 不加时间参数会立即退出、无输出——这是新手最常卡住的地方。真正有用的命令是:pidstat -w 1:每秒刷新,只显示cswch/s(自主)和nvcswch/s(非自主)非零的活跃进程pidstat -w -p 1234 0.5:盯住其中PID,半一秒采,适合抓短时休眠(比如 GC 触发瞬间)pidstat -w -t -p 1234 1:开启线程级统计(LWP),Java/Python 多场景线程必须加 -t,否则进程级 cswch/s 可能被平均填充
注意:pidstat 第一次输出是累计值,第二次才开始算增量流量;老版本 sysstat(如 RHEL 7 自带的 10.1.5)不支持 -w 和 -t 生效,同时先跑 pidstat -V 确认版本 ≥ 11.0.0。 CentOS Linux 7.9.2009
CentOS Linux 7.9.2009 是传统 CentOS Linux 7 的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容 RHEL 7 生态、文档丰富和软件支持广泛着称,曾长期用于 Web 服务、数据库、虚拟化节点和企业内部业务系统。
CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁修复风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。下载cswch/s高%CPU低?重点查I/O和锁
相关切换(cswch/s)本质是进程主动让出CPU,常见于等待资源就绪。典型表现:cswch/s > 100且且 nvcswch/s ≈ 0:不是CPU不够,而是卡在某处——用 strace -p PID -e trace=epoll_wait,read,write,futex 看当前阻塞在哪类系统调用Java应用中 cswch/s 突增 + jstack 显示大量 java.lang.Thread.State: BLOCKED → 锁锋太细或同步抢抢数据库连接池晚期,线程在 getConnection() 上等待空闲连接,支持条件变量等待,计入 cswch/s进程状态为D(不可中断睡眠)时,pidstat -w 会完全不显示——此时用 ps -o pid,comm,state,wchan -p PID 查卡在哪个内核函数里别信瞬间最高,用 /proc/stat 平滑算速率
vmstat 和 pidstat 都是采样工具,容易被几秒毛刺干扰。真要判断长期趋势,直接读取内核统计:运行 grep ctxt /proc/stat,得到形如 ctxt 123456789,这是系统启动以来的总切换次数近 30 秒再查一次,差值 ÷ 30 = 平均 cps,比实时工具更抗噪如果 1 小时内增长 360 万次(即平均 1000/s),而业务 QPS 没变,说明底层有隐性资源争抢(比如日志刷盘频率突增、定时任务批量) fork)
真正难的不是查出cs高,而是区分它是症状还是更新——比如nvcswch/s高,到底是线程数远超CPU核数,还是Java GC线程隔离抢占,抑或内核调度器本身引发的问题。这需要结合mpstat -P ALL 1看核各负载分配、perf record -e context-switches抓开关,才能闭环。