调整普通优先级
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 值
- 多进程服务要确认主进程与子进程的取值是否一致
- 容器内调整只影响容器命名空间内可见的进程