nice命令用于设置进程CPU优先级,范围-20(最高)至+19(最低),普通用户仅能设0–19;renice可动态调整运行中进程的nice值;top需手动启用NI列查看,且需注意cgroups、ionice等协同机制。

如何用 nice 启动一个低优先级进程
直接在命令前加 nice -n 10 command 就能以更低的 CPU 优先级运行它。Linux 的 nice 值范围是 -20(最高优先级)到 +19(最低优先级),普通用户只能调高(即设为 0–19),不能设负值。
- 普通用户执行
nice -n -5 sleep 10会报错:setpriority: Permission denied - 想设负值必须用
sudo nice -n -5 command,但多数场景没必要——除非你确实在做实时调度类任务 -
nice只影响 CPU 时间片分配,不影响 I/O 或内存调度;对磁盘密集型任务效果不明显 - 示例:
nice -n 15 find /var/log -name "*.log" -exec grep "error" {} \;,避免日志扫描拖慢其他服务
renice 修改正在运行的进程优先级
用 ps 或 top 找到目标进程 PID 后,用 renice 动态调整。它比 nice 更常用,因为很多进程启动后才发现太“抢资源”。
- 查进程:
ps aux | grep nginx→ 拿到 PID,比如1234 - 调低优先级(让出 CPU):
renice 10 1234 - 恢复默认值:
renice 0 1234 - 一次改多个 PID:
renice 15 1234 5678 9012 - 注意:普通用户只能改自己启动的进程,且只能调高 nice 值;root 可以任意调整
为什么 nice 值变了,top 里看不出来?
top 默认不显示 NI 列(nice 值),容易误以为没生效。而且有些进程启动时被 systemd 或容器 runtime 自动设置了 nice,手动再设可能被覆盖。
- 在
top中按f进入字段管理,用方向键选中NI,按空格启用,再按q退出 - 确认是否生效:运行
ps -o pid,comm,nice -p 1234,直接看输出里的nice字段 - systemd 服务可通过
systemctl show servicename | grep Nice查默认设置,修改需编辑Nice=到 service 文件的[Service]段 - Docker 容器内运行的进程,宿主机上的
renice通常无效——容器有自己的 cgroup 限制,得用--cpu-shares或--nice(较新版本)控制
和 cgroups、ionice 搭配使用的实际边界
nice 只管 CPU 调度,现代系统里单靠它压不住 I/O 狂魔或内存泄漏进程。真正要稳住系统,得知道它在哪失效、该补什么。
- 磁盘读写卡顿?
nice几乎没用,换ionice -c 3 command(空闲类 I/O 调度)更有效 - 想限制某进程最多用 20% CPU?
nice不行,得用cgroups v2配cpu.max - 脚本里混用
nice和后台 & 符号要注意顺序:nice -n 10 long.sh &是对整个 shell 生效;而(nice -n 10 long.sh) &更安全,避免子 shell 继承错误调度策略 - 云服务器上某些厂商禁用了负 nice 值,
renice -n -1 1234可能静默失败,建议先getconf _SC_NICE_MAX和_SC_NICE_MIN确认系统支持范围










