Linux进程优先级调整_nice与renice说明【指导】

16次阅读

nice值是linux中决定进程CPU时间分配权重的整数(-20到+19),值越小优先级越高;普通用户只能调高nice值(降低优先级),仅root可调低nice值提升优先级。

Linux进程优先级调整_nice与renice说明【指导】

普通用户只能降低自己进程的优先级(即调高 nice 值),不能提升;只有 root 才能调低 nice 值(即提高调度优先级)。

什么是 nice 值?它怎么影响进程调度

nice 值是 Linux 进程调度器用来决定 CPU 时间分配权重的一个整数,范围是 -20 到 +19。数值越小,进程“越受宠”,越容易被调度执行;数值越大,越“谦让”,CPU 时间越少。

注意:nice 值不是实时优先级(rt_priority),也不等同于 PR 列显示的值(ps 中的 NI 列才是真正的 nice 值)。内核实际使用的是 static_prio,它由 nice 映射而来(static_prio = nice + 120)。

  • nice = -20 → 最高用户态优先级(仅 root 可设)
  • nice = 0 → 默认启动优先级
  • nice = +19 → 最低优先级(所有用户都可设)

启动时用 nice 设置优先级

在命令前加 nice,适用于新进程。它只对子进程生效,不影响当前 shell。

常见用法:

  • nice -n 10 command:以 nice=10 启动 command
  • nice --15 long_running_script.sh:注意双横线写法等价于 -n -15,但需 root 权限
  • 不加 -n 也能用:nice 5 sleep 10 等价于 nice -n 5 sleep 10

错误示范:

nice -20 firefox  # 普通用户会报错:Permission denied

这是因为 -20 超出普通用户权限范围(默认只允许 0~19)。

运行中用 renice 动态调整

renice 修改已有进程的 nice 值,支持按 PID、用户或组批量调整。

关键限制和行为:

  • 普通用户只能对自己拥有的进程调用 renice,且只能调高 nice 值(即让进程更谦让)
  • root 可以任意修改任何进程的 nice,包括降值(如从 5 改为 -5)
  • 对整个用户的所有进程生效: renice +10 -u username
  • 对进程组生效: renice -n 5 -g 1234

示例:

renice -n 15 12345        # 把 PID 12345 的 nice 设为 15 renice -n -5 -p 12345     # 需 root;把该进程优先级提高

注意:renice 不会中断进程,但新调度策略下一次调度周期就会生效。

查看进程 nice 值的正确方式

别只看 ps 输出里的 PR 列——那是实时优先级(含实时进程标记),容易误导。真正要看的是 NI 列。

推荐命令:

  • ps -o pid,ni,comm -p 12345:精准查单个进程的 nice
  • top → 按 r 键可交互式 renice(同样受权限限制)
  • htop → F7/F8 更直观,但底层仍是调用 renice

一个易错点:某些系统上 ps aux 默认不显示 NI 列,需显式指定字段;而 ps -eo pid,nice,comm 才可靠。

真正麻烦的不是命令怎么敲,而是权限边界和调度效果的延迟感知——nice 只影响 CFS 调度器下的时间片权重,对 I/O 密集型或已阻塞的进程几乎无感;而且多个高 nice 值进程争抢 CPU 时,差异可能比预期小得多。

text=ZqhQzanResources