Linux进程优先级设置_nice与renice实战

6次阅读

linux进程优先级由nice值控制,范围-20(最高)至+19(默认0),root可设任意值,普通用户仅能调高nice值;用nice启动新进程,renice动态调整运行中进程,需注意权限、cgroups限制及实时调度策略差异。

Linux进程优先级设置_nice与renice实战

Linux中进程优先级通过nice值控制,范围是-20(最高)到+19(最低),默认为0。普通用户只能调高nice值(即降低优先级),而root可设任意值。实际调整用nice启动新进程,用renice修改运行中进程。

使用nice启动高/低优先级进程

启动命令前加nice -n N cmd,N为指定nice值。

  • 让后台任务不抢资源:比如压缩大文件时降权,nice -n 10 tar -cf archive.tar /data
  • 关键服务提权需root:如sudo nice -n -5 ./critical_service(普通用户执行会报错)
  • 不带-n也可简写:nice -10 sleep 100等价于nice -n -10 sleep 100

用renice动态调整正在运行的进程

renice支持按PID、用户或组修改。常用格式:renice -n N -p PID

  • 查PID再调整:先ps aux | grep firefox找到PID,再sudo renice -n 5 -p 12345
  • 批量调整个用户所有进程:sudo renice -n 10 -u username
  • 按组调整:sudo renice -n -2 -g devgroup(需对应GID存在)
  • 调整后可用ps -o pid,ni,comm -p PID验证ni列是否更新

权限与限制注意事项

非root用户无法提升优先级(即不能设负nice值),也不能降低其他用户的进程优先级。

  • 普通用户执行nice -n -1 sleep 10会提示“Permission denied”
  • 想绕过限制?需配置/etc/security/limits.conf,例如username soft priority 5
  • 容器环境(如docker)中,nice值受cgroups限制,即使root也可能被截断
  • 实时调度策略(SCHED_FIFO/SCHED_RR)不受nice影响,需用chrt单独设置

查看和判断进程优先级是否生效

pstop确认当前nice值,注意区分NI(nice)和PRI(内核计算的实际优先级)。

  • ps -eo pid,ni,pri,comm --sort=-ni | head -10:按nice降序看最“闲”的进程
  • top中按r键可交互式renice(需有权限)
  • PRI = 80 + NI(对普通SCHED_OTHER进程),所以nice=10 → PRI=90;但该公式仅作参考,实际受内核版本和调度器影响
  • 若renice后无变化,检查进程是否已进入不可中断状态(D状态),此时无法响应调度调整
text=ZqhQzanResources