补充说明
chrt 属于 util-linux,可把进程切换到 SCHED_FIFO、SCHED_RR、SCHED_OTHER、SCHED_BATCH、SCHED_IDLE、SCHED_DEADLINE 等调度策略,并设置优先级。实时策略适合低延迟任务,但设置过高可能饿死普通进程,甚至让系统失去响应。
设置实时优先级通常需要 root 或 CAP_SYS_NICE。更稳妥的做法是通过 systemd 单元的 CPUSchedulingPolicy=、CPUSchedulingPriority= 持久配置,而不是临时对运行中进程反复调整。
语法
chrt [选项] 优先级 命令 [参数...]
chrt -p [选项] 优先级 PID
选项
-p, --pid:操作已存在的进程-m, --max:显示该策略的优先级范围-a, --all-tasks:作用于进程的所有线程-o, --other:SCHED_OTHER(默认分时策略)-f, --fifo:SCHED_FIFO(先入先出实时)-r, --rr:SCHED_RR(时间片轮转实时)-b, --batch:SCHED_BATCH(批处理)-i, --idle:SCHED_IDLE(最低优先级)-d, --deadline:SCHED_DEADLINE
实例
# 查看进程当前的调度策略与优先级
chrt -p 1234
# 查看 SCHED_FIFO 的优先级范围
chrt -m -f
# 以 SCHED_FIFO 优先级 50 启动程序
sudo chrt -f 50 ./realtime_app
# 把正在运行的进程改为 SCHED_RR 优先级 20
sudo chrt -p -r 20 1234
# 修改进程内所有线程
sudo chrt -a -p -f 10 1234
# 恢复为普通分时调度
sudo chrt -p -o 0 1234
实时优先级数值越大越高;修改前先确认程序确实需要硬实时,否则优先排查锁竞争与 I/O 抖动。