Linux中不能用sysctl直接调整单个进程的实时优先级,它仅管理内核全局调度参数,即实时进程整体CPU时间配额;真正设置进程实时优先级需用chrt命令。

真正设置单个进程实时优先级要用 chrt 命令(配合 SCHED_FIFO 或 SCHED_RR),而 sysctl 调整的是这些实时进程在系统中“最多能跑多久”——防止它们霸占 CPU 导致 SSH 断连或系统无响应。
控制实时进程 CPU 时间配额的 sysctl 参数
关键参数只有两个,都位于 /proc/sys/kernel/ 下:
-
kernel.sched_rt_runtime_us:每个周期内,所有实时进程加起来最多可运行的微秒数,默认
950000(即 0.95 秒) -
kernel.sched_rt_period_us:配额计算周期长度,单位微秒,默认
1000000(即 1 秒)
也就是说,默认配置下,每秒钟最多有 0.95 秒留给实时进程,剩下 0.05 秒强制留给普通进程(SCHED_NORMAL),确保系统仍可交互。
常见调整场景与操作
若发现实时任务导致系统卡死、SSH 响应迟缓,说明实时时间配额过大或被耗尽,可收紧限制:
- 临时降低实时进程总配额(例如缩到 0.5 秒):
sudo sysctl -w kernel.sched_rt_runtime_us=500000 - 扩大周期但保持比例(如想让实时进程占 90%,周期设为 2 秒):
sudo sysctl -w kernel.sched_rt_period_us=2000000sudo sysctl -w kernel.sched_rt_runtime_us=1800000 - 彻底禁用实时进程 CPU 时间(调试/安全场景):
sudo sysctl -w kernel.sched_rt_runtime_us=0(此时任何 SCHED_FIFO/SCHED_RR 进程都无法获得 CPU)
配套参数:SCHED_RR 时间片长度
当使用轮转式实时策略(SCHED_RR)时,每个实时进程单次执行多久才切换,由另一个参数控制:
-
kernel.sched_rr_timeslice_ms:单位毫秒,默认
100(0.1 秒),有效范围 1–100 - 调小它会让同优先级实时进程切换更频繁,适合需要更细粒度响应的场景;调大则减少上下文切换开销
- 示例:
sudo sysctl -w kernel.sched_rr_timeslice_ms=20
持久化配置
上述 sysctl 设置重启后失效。要永久生效,写入 /etc/sysctl.conf 或专用配置文件:
- 创建
/etc/sysctl.d/99-realtime.conf - 写入内容如:
kernel.sched_rt_runtime_us = 500000kernel.sched_rt_period_us = 1000000kernel.sched_rr_timeslice_ms = 50 - 加载:
sudo sysctl --system


















