首页/系统/Linux 内核与性能调优速查/nice / renice 调整普通优先级
CPU 与调度60 条

nice / renice 调整普通优先级

nice 值 -20..19(越小优先级越高);普通用户只能调大 nice,调小需要 CAP_SYS_NICE;renice 立即生效但不持久。

调整普通优先级

nice 值范围 -20 到 19,数值越小优先级越高。普通用户只能把 nice 调大(降低优先级),要调小(提高优先级)需要 CAP_SYS_NICE 能力。nice 用于以指定优先级启动新命令,renice 用于调整已运行进程,也可以按用户或组批量调整。两者都只影响普通分时任务之间的相对份额,对实时策略任务无效,而且运行时调整在重启后失效。

基本信息

取值范围-20 到 19,数值越小优先级越高
权限普通用户仅能把 nice 调大,调小需要 CAP_SYS_NICE
查看ps -eo pid,ni,pcpu,comm
持久化systemd 单元的 Nice= 指令
生效对象仅普通分时任务,对实时策略无效

典型使用场景

  • 备份、编译等后台任务降级,减少对在线服务的影响
  • 临时提升关键进程优先级以加速处理
  • 排查高 nice 值进程拖慢整机的情况
  • 服务化部署时固化优先级设置
  • 与 chrt 的实时策略做区分

用法示例

用法示例
nice -n 10 ./batch.sh                  # 以 nice 10 启动新进程
renice -n 5 -p 12345                   # 调整指定进程
renice -n 5 -u www                     # 批量调整某用户的全部进程
ps -eo pid,ni,pcpu,comm --sort=ni | head -20
nice -n -5 ./critical.sh               # 提高优先级需要相应权限
getpriority -p 12345                   # 查看单个进程的 nice 值
systemctl show myservice -p Nice       # 查看服务单元里固化的值

用法与注意

用法说明注意
nice -n N 命令以指定 nice 启动新进程不影响已有进程
renice -n N -p PID调整运行中进程调小需要相应权限
renice -u 用户调整该用户的全部进程影响面大,操作前确认范围
systemd 的 Nice=在服务单元中固化比运行时 renice 更可靠
重启后 renice 的结果会丢失,长期生效要写进 systemd 单元或启动脚本。
nice 只调整普通任务之间的权重分配,对 SCHED_FIFO 与 SCHED_RR 这类实时策略任务完全无效。

排查时的检查点

  • 先确认进程的调度策略:实时策略下 nice 值不起作用
  • 再看是否由 cgroup 的 CPU 权重在起作用,而不是 nice 值
  • 多进程服务要确认主进程与子进程的取值是否一致
  • 容器内调整只影响容器命名空间内可见的进程

易错点

  • 用 renice 追求持久效果:重启即失效,应写入服务单元
  • 以为 nice 能压制实时任务:对实时策略无效,方向完全错误
  • 普通用户尝试调小 nice:会因缺少能力被拒绝,需要提权或改服务配置
  • 忘记子进程会继承:以 nice 启动的进程其子进程一并继承,影响范围超预期
  • 只调一个进程:多进程服务的其他进程优先级不一致,效果被稀释

数据来源与参考

  • util-linux 文档 renice(1)
  • procps-ng 文档 nice(1)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌