linux 中 nice 值用于调节 cfs 调度下进程的 cpu 时间片分配,范围 -20(最高优先级)至 19(最低),普通用户只能调高(降低优先级),root 可设任意值;适用于编译、压缩等后台任务,不适用于硬实时场景。

Linux 中的 nice 值是控制进程 CPU 调度优先级的核心机制之一,它不改变实时性,而是影响 CFS(完全公平调度器)对 CPU 时间片的分配倾向。值越小(最低 -20),优先级越高;值越大(最高 19),优先级越低。普通用户只能调高 nice 值(降低优先级),而 root 可以设为任意值。
理解 nice 和 renice 的适用场景
调整 nice 值适合长期运行、资源消耗明显但非关键的后台任务,比如编译、压缩、日志归档、批量数据处理等。它不适合需要硬实时响应的服务(如音频流、工业控制),这类场景应使用 chrt 设置实时调度策略(SCHED_FIFO / SCHED_RR)。
- 启动时设置:用 nice -n N command,例如 nice -n 10 tar -cf archive.tar /data
- 运行中调整:用 renice -n N -p PID,例如 renice -n 5 12345
- 批量调整同用户进程:renice -n 8 -u username
合理选择 nice 值的参考原则
默认进程 nice 值为 0。除非有明确冲突,不建议随意改动。一般按影响范围分层设定:
- 交互式前台任务(终端、GUI 应用):保持 0 或略负(-2 ~ 0),保障响应流畅
- 批处理/后台计算类任务:+5 到 +15 是安全区间,+10 是常用折中值
- 低优先级维护任务(如 logrotate、backup 脚本):可设为 +15 ~ +19,尽量减少对业务干扰
- 避免设为 -20(仅限系统关键守护进程),普通应用设负值易引发调度失衡
配合 ionice 处理 I/O 密集型任务
CPU 优先级(nice)不影响磁盘 I/O 竞争。若任务既占 CPU 又频繁读写磁盘(如数据库导入、大文件拷贝),需同步限制 I/O 权重:
- ionice -c 2 -n 7 nice -n 12 rsync -a /src/ /dst/:设为“最佳努力”类(class 2)、最低 I/O 优先级(n 7)
- class 1(实时)慎用,可能饿死其他进程;class 3(空闲)只在系统空闲时执行 I/O
- 可用 iotop 实时观察各进程 I/O 优先级和带宽占用
验证与持续监控技巧
调整后务必确认生效并观察实际效果:
- 查当前值:ps -o pid,ni,comm -p 12345 或 top 按 Shift+F 添加 NI 列
- 对比负载变化:用 uptime、vmstat 1 观察 load average 和 %si/%sy 是否趋于平稳
- 避免“过度降权”:若某进程 nice=19 仍持续抢占 CPU,说明瓶颈可能在锁、内存或系统调用,而非调度优先级










