首页/系统/Linux 运维命令速查/chrt 调整调度策略
进程与作业69 条

chrt 调整调度策略

查看/设置进程调度策略与优先级:普通任务 SCHED_OTHER,实时任务 FIFO/RR;只在确实需要时使用,滥用会让系统饿死。

Linux 运维命令速查系统更新于 2026-10-13

命令是干什么的

chrt 是 util-linux 提供的调度策略工具:既能查看进程当前用的调度策略与优先级,也能按指定策略启动程序。Linux 里普通进程走 SCHED_OTHER 由内核按 nice 值分配 CPU,实时策略 FIFO 与 RR 则按固定优先级抢占普通进程;BATCH 适合不在意延迟的纯计算任务,IDLE 只在系统空闲时才拿到 CPU。实时策略用错会让包括 sshd 在内的普通进程拿不到 CPU,所以 chrt 是排障与实时性验证工具,不是日常调优手段。

基本信息

适用平台Linux,util-linux 提供的 chrt,主流发行版默认自带
查看语法chrt -p 进程号 查看单个进程;chrt -m 列出支持的策略与优先级范围
设置语法chrt -f 50 命令 启动时指定;chrt -f -p 50 进程号 改运行中的进程
策略选项-o OTHER、-f FIFO、-r RR、-b BATCH、-i IDLE、-d DEADLINE
优先级范围实时策略 1 到 99,越大越高;普通策略由 nice 值决定,范围 -20 到 19
权限要求设置实时策略需要 root 或 CAP_SYS_NICE 能力

典型使用场景

  • 实时性验证:让测试程序以 FIFO 高优先级运行,测量抖动与最坏延迟
  • 把后台计算任务降到 BATCH 或 IDLE,避免和在线业务抢 CPU 时间片
  • 排查进程卡顿:先确认是否有进程被设成实时策略,把普通进程压在后面
  • 音频与工控类程序的调优基线,验证通过后把策略固化到服务单元里
  • 性能对照实验:同一程序在不同策略下运行,量化调度带来的差异
  • 处理 hung task 告警时,确认是否存在长期占满 CPU 的实时任务

常用示例

常用示例
chrt -p 1234                          # 查看 1234 号进程的策略与优先级
chrt -p $$                            # 查看当前 shell 自己的调度策略
ps -eo pid,cls,rtprio,ni,comm | head  # 批量列出各进程的调度类与优先级
chrt -f 50 ./latency-test             # 以 FIFO 优先级 50 运行测试程序(需 root)
chrt -f -p 50 1234                    # 把运行中的进程改成 FIFO 优先级 50
chrt -b 0 ./batch-job                 # BATCH 适合纯计算、不在意延迟的任务
chrt -i 0 ./idle-task                 # IDLE 最低优先级,只在系统空闲时运行
chrt -o 0 -p 1234                     # 改回普通策略 SCHED_OTHER
chrt -m                               # 列出本内核支持的各策略优先级范围

ps 调度列逐列读法

列名含义正常与异常
CLS调度类:TS 普通、FF FIFO、RR 轮转、B BATCH、IDL IDLE、DL DEADLINE普通服务的进程应是 TS,出现 FF 或 RR 要问清原因
RTPRIO实时优先级 1 到 99非实时进程这一列为空或 0
NInice 值,范围 -20 到 19普通服务默认 0,出现负值说明被提高过优先级
PID 与 COMM进程号与命令名用来定位是谁占着实时优先级
内核给实时任务留了带宽上限:sched_rt_runtime_us 与 sched_rt_period_us 默认约 950000 与 1000000,也就是实时任务最多用掉约 95% 的 CPU 时间。测实时性前先确认这两个参数,否则会把内核节流误判成程序性能不足。
chrt 的设置不持久,重启后回到默认。systemd 托管的服务可以在单元文件里写 CPUSchedulingPolicy 与 CPUSchedulingPriority,让策略随服务启动一起生效。
DEADLINE 策略要配合运行时间、周期、截止时间三个参数才有意义,配置复杂且需要内核支持;没有明确的实时性指标时不要贸然使用。

易错点

  • 把长跑服务设成 FIFO 高优先级:CPU 密集时会饿死 sshd 和内核线程,系统看起来像卡死,连按键响应都迟缓,只能从带外通道介入
  • 忽略实时带宽节流:内核会周期性让实时任务让出 CPU,把节流现象当成程序抖动,排查方向整个偏掉
  • 用 chrt 改运行中进程失败却以为生效:非 root 或缺少 CAP_SYS_NICE 时命令直接拒绝执行,脚本里如果不检查返回码就会以为设置成功
  • 把 chrt 当常规调优手段到处加实时优先级:多个实时任务互相抢占,优先级顺序难以预测,线上问题更难复现
  • 改动不持久:重启后策略回退,压测结论与生产表现不一致,固化要靠 systemd 单元或开机脚本

数据来源与参考

  • man 1 chrt(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌