一、进程调度基础认知
1. 调度器核心作用
Linux 通过进程调度器分配 CPU 时间,实现 "多进程并发",核心平衡两个关键:
- 按时间片轮转(默认 10-20ms / 片),保证进程公平使用 CPU
- 按优先级分级,让重要进程获得更多 CPU 资源
2. 调度器分类与策略
实时调度器(高优先级进程专用)
- 适用场景:系统关键进程,需快速响应
- 支持策略:
- SCHED_RR:同优先级进程轮流占用 CPU,默认时间片 0.1 秒
- SCHED_FIFO:进程一旦运行,直到 IO 阻塞或被高优先级抢占
- 优先级范围:1-99(数值越大优先级越高)
非实时调度器(普通进程专用)
- 适用场景:大部分日常进程(如 Shell、应用程序)
- 支持策略:
- SCHED_NORMAL(SCHED_OTHER):标准时间共享调度
- SCHED_BATCH:批量处理进程,减少调度竞争
- SCHED_IDLE:最低优先级,仅 CPU 空闲时运行
- 优先级控制:通过
nice值调整,范围 - 20(最高)到 19(最低)
3. 关键优先级规则
- 实时进程优先级 > 非实时进程优先级(即使最低实时进程也比最高 nice 值的非实时进程优先)
- 无 CPU 竞争时,低优先级进程也能占用全部 CPU 资源
二、核心命令语法教学(含实战示例)
1. nice 命令:启动进程时设置 nice 值
语法格式
bash
nice [OPTION] [COMMAND [ARG]...]
关键参数
-n, --adjustment=N:指定 nice 值调整量(默认 + 10)- 无 COMMAND 时:打印当前 Shell 的 nice 值
权限限制
- 普通用户:仅能设置非负 nice 值(优先级降低)
- root 用户:可设置 - 20 到 19 的任意 nice 值
实战示例
bash
# 1. 默认调整(+10)启动进程
nice md5sum /dev/zero & # 新进程nice值=0+10=10
# 2. 普通用户设置+2优先级
nice -n 2 md5sum /dev/zero & # 新进程nice值=2
# 3. root用户设置-2高优先级(普通用户执行会报错)
sudo nice -n -2 md5sum /dev/zero & # 新进程nice值=-2
2. renice 命令:调整已运行进程的 nice 值
语法格式
bash
renice [-n] <priority> [-p <pid> | -g <pgid> | -u <user>]
关键参数
-n <priority>:目标 nice 值(必填)-p <pid>:指定进程 ID(默认选项)-g <pgid>:按进程组 ID 调整-u <user>:按用户名 / 用户 ID 批量调整
权限限制
- 普通用户:仅能升高 nice 值(降低优先级)
- root 用户:可任意调整 nice 值(升高 / 降低)
实战示例
bash
# 1. 调整单个进程(PID=55782)的nice值为2
renice -n 2 55782
# 2. 调整用户laoma所有进程的nice值为5
sudo renice -n 5 -u laoma
# 3. 普通用户尝试降低优先级(报错示例)
renice -n -2 55782 # 输出:Permission denied
3. chrt 命令:配置实时调度策略与优先级
语法格式
bash
# 1. 启动进程时设置实时调度属性
chrt [选项] <优先级> <命令> [参数...]
# 2. 调整已运行进程的调度属性
chrt [选项] --pid <优先级> <pid>
# 3. 查看进程调度属性
chrt -p <pid>
关键参数
- 调度策略选项:
-r, --rr:设置为 SCHED_RR(默认实时策略)-f, --fifo:设置为 SCHED_FIFO-o, --other:切换为非实时 SCHED_NORMAL 策略-m, --max:查看各策略的优先级范围
- 操作选项:
--pid <pid>:针对已运行进程操作-v, --verbose:显示详细执行结果
权限限制
- 仅 root 用户可设置实时调度策略
实战示例
bash
# 1. 查看各调度策略的优先级范围
chrt -m
# 2. 以SCHED_RR策略(优先级5)启动进程
sudo chrt -r 5 md5sum /dev/zero &
# 3. 将已运行进程(PID=56225)改为SCHED_FIFO策略(优先级10)
sudo chrt -f --pid 10 56225
# 4. 查看进程调度属性
chrt -p 56225
# 5. 将实时进程切换为非实时策略
sudo chrt -o --pid 0 56225
4. 监控命令:查看进程优先级
(1)top 命令:实时监控
- 启动命令:
top - 关键字段解读:
- PR:进程优先级(实时进程显示 "rt",非实时进程对应 nice 值映射)
- NI:nice 值(-20 到 19)
- 交互操作:在 top 界面按
r,输入 PID 可直接修改 nice 值
(2)ps 命令:精准查询
bash
# 查看进程的nice值和命令
ps -o pid,nice,command <pid>
# 查看实时进程的调度策略和优先级
ps -o pid,cls,rtprio,command <pid>
# 字段说明:cls=调度类型(RR/FF=实时,TS=非实时),rtprio=实时优先级
三、实时调度器系统参数配置
核心 sysctl 参数(控制实时进程 CPU 占用)
-
kernel.sched_rt_runtime_us:1 秒周期内实时进程可占用的 CPU 时间(默认 950000us=0.95 秒)- 设为 0:实时进程无法获取 CPU 时间
-
kernel.sched_rt_period_us:CPU 分配周期(默认 1000000us=1 秒) -
配置方法(临时生效): bash
sudo sysctl -w kernel.sched_rt_runtime_us=800000