nice 与 renice:把批处理任务让路
发布时间:2026-01-17 12:20       
更新时间:2026-01-17 16:42
批处理任务和在线业务抢 CPU,是单机上最常见的资源冲突:夜里跑的数据导入把网页接口拖慢,白天全量备份让登录都卡。nice 与 renice 给出的解法很朴素——给进程分优先级,让不急的任务给急的任务让路。
## 优先级是什么范围
nice 值范围 -20 到 19,数字越小优先级越高。普通用户只能把自己的任务往 0 到 19 的方向调(变得更谦让),负值是 root 的特权,sudo nice -n -10 命令 才能以高优先级启动。启动时指定:
```
nice -n 19 python3 batch.py
renice -n 10 -p 12345 # 把运行中的 12345 号进程调到 10
```
不带参数的 nice 默认加 10。查看当前值有两个入口:top 的 NI 列,或 ps -o ni,comm -p 12345。renice 还支持按用户整体调整,renice -n 15 -u backupuser,把某个账号名下所有进程一起降级,适合批处理有专门账号的部署方式。调整不是永久的,进程重启后回到启动时的默认值,长期生效要写进服务启动脚本或 systemd 的 Nice= 字段。
## 对交互业务的意义
内核调度器会照顾优先级高的进程。把批处理调到 15 以上,白天高峰时它自动退让,网页响应不再被拖累;夜里机器空闲,它照常吃满剩余算力,总吞吐几乎不损失。代价是任务本身变慢,适合对完成时间不敏感的后台作业,实时性要求高的任务别用这招压它。
## 配套的磁盘让路
CPU 让了路,磁盘也是战场。ionice 给进程设 IO 优先级,一句话用法:
```
ionice -c3 nice -n 19 tar czf backup.tgz /data
```
-c3 表示只在空闲时做 IO,与 nice 组合就是完整的低抢占后台任务。
## 怎么用才稳
先量化再调整:用 top 确认冲突双方,然后只调批处理一侧,不动在线业务。调整前后的 NI 值记进值班日志,方便下一个人接手。调整即时生效,观察十分钟接口耗时即可验证效果。这属于零成本的单机方案;业务混部严重、经常互相拖垮时,更根本的解法是把任务挪到独立时段或独立机器上跑。