nice 是什么
nice 用来以指定的 CPU 调度优先级启动一个命令。nice 值范围是 -20 到 19,数值越小优先级越高:默认是 0,普通用户只能把值调大也就是降低优先级,要设为负值必须由 root 执行。典型用法是给备份、压缩、索引重建这类「重要但不着急」的重任务加 +10 以上的偏移,让业务进程在 CPU 竞争时优先拿到时间片。它只影响有竞争时的分配,系统空闲时低优先级任务照样跑满 CPU。
基本信息
| 适用平台 | GNU/Linux、macOS(coreutils 与系统自带 nice) |
|---|---|
| 语法 | nice [-n 增量] 命令 |
| 取值范围 | -20 最高优先级到 19 最低,默认 0 |
| 权限 | 普通用户只能调大数值,负值需要 root |
| 相关命令 | renice 调整运行中进程,ionice 调整磁盘 IO 优先级 |
| 容器环境 | cgroup 的 CPU 权重可能覆盖 nice 的实际效果 |
典型使用场景
- 夜间备份、打包压缩等重任务降低优先级,避免抢占在线业务。
- 索引构建、日志归档这类长耗时任务错峰运行。
- 批量数据处理任务限制资源占用,保证关键服务响应。
- 排查 CPU 竞争问题时用低优先级复现现象。
- 组合 ionice 同时降低 CPU 与磁盘 IO 优先级。
常用写法
常用写法
nice -n 10 tar czf backup.tgz /data # 低优先级打包备份
nice -n 19 ionice -c3 rsync -a /data/ /backup/ # 最低优先级组合
nice # 查看当前 shell 的默认 nice 值
nice -n -5 important-cmd # 提高优先级,需要 root
nice -n 10 ./batch-job.sh > /var/log/batch.log 2>&1 & # 后台低优先级批次
ps -eo pid,ni,cmd | sort -k2 -n | head # 看哪些进程 nice 值最低
renice +10 -p 1234 # 调整已运行进程的优先级要点对照
| 项目 | 说明 | 使用要点 |
|---|---|---|
| 取值范围 | -20 到 19,默认 0 | 数值越小优先级越高 |
| 普通用户 | 只能调大数值 | 负值必须 root,脚本别假设有这个权限 |
| renice | 调整运行中进程 | 已启动的任务可以事后调整 |
| ionice | 调整磁盘 IO 优先级 | CPU 与 IO 是两套机制,需分别设置 |
| 容器环境 | cgroup 权重优先 | nice 调了也可能看不出效果 |
| 系统空闲时 | 优先级影响很小 | 低优先级任务同样能跑满 CPU |
nice 只决定 CPU 竞争时的分配比例:系统空闲时不论优先级高低都能跑满 CPU,所以「加了 nice 任务还是很快」并不矛盾。
容器里 CPU 主要受 cgroup 权重与配额约束,nice 的实际效果可能被覆盖。在 Kubernetes 环境中应优先用资源请求与限制表达需求。
提高优先级也就是设置负值需要 root 权限;部署脚本里不要假设可以设置负的 nice 值,否则在普通用户下会直接报错退出。