Linux调整进程实时优先级需配置内核调度参数、用户权限(limits.conf与setcap)及CPU时间配额(sched_rt_runtime_us/period_us),并支持systemd或shell脚本固化策略。

Linux 调整进程实时优先级分配规则,核心是控制哪些进程能用实时策略(SCHED_FIFO/SCHED_RR)、能设多高的优先级(1–99),以及谁有权限设置。这不是单靠一条 chrt 命令就能生效的事,而是一套涉及内核调度、用户权限和系统配置的组合操作。
确认并查看当前实时优先级限制
普通用户默认不能设置实时优先级,系统会限制最大可设值(通常为 0)。先查清楚现状:
- 运行
chrt -m查看各策略支持的优先级范围(SCHED_FIFO 和 SCHED_RR 通常是 1–99) - 运行
ulimit -r查看当前 shell 会话允许的最大实时优先级(常为 0,即禁止) - 运行
cat /proc/sys/kernel/sched_rt_runtime_us和/proc/sys/kernel/sched_rt_period_us可知实时进程总的 CPU 时间配额(默认是 95% 可用,防止单个实时任务霸占 CPU)
放开普通用户的实时权限
若需让非 root 用户也能设置实时优先级,必须修改两个地方:
-
修改 limits 配置:编辑
/etc/security/limits.conf,加入两行:* soft rtprio 99* hard rtprio 99
(*可替换为具体用户名或组名,如@realtime;rtprio即 real-time priority) -
赋予 chrt 权限能力:执行
sudo setcap cap_sys_nice=eip /usr/bin/chrt,这样普通用户调用chrt时就能绕过 root 依赖,直接调用内核sched_setscheduler()
改完需重新登录终端或重启会话才生效。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
调整实时进程的 CPU 时间保障机制
Linux 默认限制实时进程总占用 CPU 的比例,避免系统卡死。可通过 sysctl 动态调整:
- 临时生效(重启失效):
sudo sysctl -w kernel.sched_rt_runtime_us=950000sudo sysctl -w kernel.sched_rt_period_us=1000000
(表示每 1 秒内最多允许实时进程运行 0.95 秒) - 永久生效:写入
/etc/sysctl.conf,添加:kernel.sched_rt_runtime_us = 950000kernel.sched_rt_period_us = 1000000
设为 -1 表示不限制(不推荐,仅调试用)。
固化进程启动时的实时策略与优先级
避免每次手动 chrt,推荐在服务启动脚本中绑定策略:
- Systemd 服务:在
.service文件的[Service]段加:ExecStart=/usr/bin/chrt -f 80 /path/to/your/app
或更稳妥地用RuntimeDirectoryMode=0755+LimitRTPRIO=99配合chrt - Shell 启动脚本:直接包装命令,例如:
#!/bin/shexec chrt -r 70 /opt/myapp/bin/collector "$@"
注意:SCHED_FIFO 适合低延迟、短执行时间的任务;SCHED_RR 更适合需要时间片轮转、防止单一高优任务饿死其他实时任务的场景。

















