首页/系统/信创系统运维速查/nice/renice 调整进程优先级
服务与运维65 条

nice/renice 调整进程优先级

CPU 竞争时把批处理任务降级:nice 在启动时设定优先级(-20..19,越小越优先),renice 调整运行中进程,ionice 控制磁盘 IO 优先级,避免批处理抢占业务资源。

信创系统运维速查系统更新于 2026-10-13

调度优先级解决什么问题

同一台机器上业务进程与批处理任务争抢资源时,单纯扩容不经济,更常见的做法是给批任务降级。nice 值范围 -20 到 19,数值越小优先级越高,20 以内只有 root 能往上提;renice 用于调整已经在跑的进程;磁盘压力场景则要用 ionice 控制 I/O 调度类别,两者配合才能让批任务真正『让路』。

基本信息

CPU 优先级nice -n 值 命令(启动时设定)、renice 值 -p PID(运行中调整)
取值范围-20(最高)到 19(最低),默认 0
按用户调整renice -n 5 -u 用户名
磁盘 I/Oionice -c 类别 -n 级别 -p PID;类别 1 实时、2 尽力而为、3 空闲
查看当前值ps -eo pid,ni,comm、top 的 NI 列
权限要求普通用户只能降低自己进程优先级;提升与调整他人进程需 root

典型使用场景

  • 夜间跑数据导入或全量备份,避免与在线业务争抢 CPU
  • 日志压缩、报表生成这类非实时任务降级执行
  • 备份任务用 ionice 空闲类别,只在磁盘空闲时才写
  • 排查负载异常时确认某个进程是否被误调成高优先级
  • 多用户开发机上约束单个用户的计算任务

示例

示例
nice -n 10 /opt/scripts/batch-import.sh    # 启动即以较低优先级运行
renice 10 -p 12345                          # 调整运行中的进程(PID 12345)
renice -n 5 -u www-data                     # 按用户调整该用户所有进程
ionice -c2 -n7 -p 12345                     # 尽力而为类别、第 7 级(越低越让路)
ionice -c3 /opt/scripts/backup.sh           # 空闲类别:仅当没有其他进程用磁盘时才执行
ps -eo pid,ni,pri,comm --sort=-ni | head     # 按 nice 值排序查看,确认调整结果

核验与替代方案

核验与替代方案
chrt -p 12345                                # 查看调度策略(SCHED_OTHER 才有 nice 概念)
ionice -p 12345                              # 查看某进程的 I/O 调度类别与级别
nice -n 19 tar -czf /backup/data.tar.gz /data # 明确最低优先级打包
systemctl edit backup.service                # 服务化任务用 unit 约束:Nice=、IOSchedulingClass=
cat /sys/fs/cgroup/system.slice/backup.service/cpu.max 2>/dev/null   # 有 CPUQuota 时看限额

取值与效果

参数取值效果
nice-20 ~ 19越小越优先,默认 0;正值为让路
renice -u用户名批量调整该用户全部进程
ionice -c1 / 2 / 3实时 / 尽力而为 / 空闲,实时类别慎用
ionice -n0 ~ 7尽力而为类别内的级别,数值越大越让路
chrt -p查看调度策略实时策略进程不受 nice 影响
renice 对卡在磁盘 I/O 上的进程作用有限:进程不在 CPU 上排队时调 nice 几乎无感,磁盘压力场景要配合 ionice 或 cgroup 层面的资源限制。
更推荐给批任务设置 CPUQuota、IOWeight 这类按服务隔离的约束,而不是对全机优先级做全局调整:服务化任务的约束写在 unit 文件里,换机器也不会丢。

易错点

  • 把在线业务的进程调高优先级(负 nice 值),批任务的让路效果有限却挤占了内核与系统进程的调度空间,整机响应变差
  • 磁盘压力场景只用 renice 调整,进程仍卡在 I/O 队列上,以为优化无效而放弃
  • 对实时调度策略的进程用 nice 调整,其实不生效,排查时白费功夫
  • 调整他人进程失败却不看报错,普通用户只能降低自己进程优先级的限制被忽略
  • 临时 renice 的调整在进程重启后失效,没有落到服务单元或启动脚本里,问题循环出现

数据来源与参考

  • man 1 nice
  • man 1 renice
  • man 1 ionice
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌