摘要:在日常的 Linux 系统管理中,资源调度是一个绕不开的话题。当系统负载过高、响应变慢,我们往往会寻找高资源占用的“罪魁祸首”,但我们还能做得更多——「调整这些进程的“优先级”」,让关键任务跑得更快,让后台任务乖乖靠边站。本文将带你深入理解 Linux 中的
在日常的 Linux 系统管理中,资源调度是一个绕不开的话题。当系统负载过高、响应变慢,我们往往会寻找高资源占用的“罪魁祸首”,但我们还能做得更多——「调整这些进程的“优先级”」,让关键任务跑得更快,让后台任务乖乖靠边站。本文将带你深入理解 Linux 中的 nice 与 renice 命令,掌控进程调度的主动权。
Linux 内核使用一种称为“「调度策略」(Scheduling Policy)”的机制来管理系统中进程的执行顺序和时间分配。调度器根据每个进程的优先级(Priority)决定其获得 CPU 的频率。
Nice 值是一个整数,范围从 「-20 到 +19」。数值越小,优先级越高(-20 是最高)。数值越大,优先级越低(+19 是最低)。默认 nice 值是 「0」。也就是说,一个 nice 值为 -10 的进程比 nice 值为 +10 的进程更容易获得 CPU 时间片。
「注意:」 只有 root 用户可以降低 nice 值(提升优先级),普通用户只能提高 nice 值(降低优先级)。
nice -n 10 tar -czf backup.tar.gz /home含义:以 nice 值为 +10 启动 tar 进程,降低它的优先级,避免占用过多 CPU。
sudo nice -n -10 ./my_script.sh含义:提高优先级,让脚本运行更快。需要管理员权限。
nice输出:
renice [优先级] -p [PID]或:
renice -n [优先级] -p [PID]-p:指定进程号(PID)-g:指定进程所属的进程组 ID(PGID)-u:指定用户名,对该用户的所有进程调整优先级在 top 的界面中,你会看到以下两列:
「NI(Nice)」:当前进程的 nice 值「PR(Priority)」:调度优先级,受 nice 值影响可以通过交互命令修改排序,例如按 P 按键以 CPU 使用率排序,按 N 以 nice 值排序。
ps -eo pid,ni,pri,comm --sort=-ni输出示例:
PID NI PRI COMMAND 1234 -10 110 my_script.sh 4567 0 120 nginx 7890 10 130 backup.shNI 是 nice 值PRI 是实际优先级(数值越低优先级越高)Nice 值并不会「强制限制」进程 CPU 时间,而是让调度器在竞争资源时更偏向于优先级高的进程。
例如,两个进程分别为 nice 0 和 nice 10,在 CPU 紧张时,前者更容易调度,但在空闲时,两者都能获得足够时间片。
Nice 值的作用主要体现在「同一核心上的多个竞争进程」之间。当进程分布在多个核心时,效果可能不明显,但在高负载环境中调优仍然非常关键。
用户运行如下命令:
tar -czf backup.tar.gz /var/log发现系统变卡,响应慢。解决方案:
nice -n 15 tar -czf backup.tar.gz /var/log或:
ionice -c3 nice -n 15 tar -czf backup.tar.gz /var/log说明:ionice 进一步控制 I/O 优先级,配合 nice 更稳定。
sudo renice -n -5 -p $(pidof mysqld)nice -n 19 ./scan_files.sh误区解释nice 值越高性能越好错。Nice 值越高,优先级越低。root 权限才能用 nice错。普通用户可以提高 nice 值(降低优先级),但不能降低。nice 作用立竿见影错。它影响的是调度倾向,不一定马上看到效果。schedtool -N -n -10 -e ./realtime_task.sh-N 代表使用 SCHED_NORMAL,-n 设置 nice 值。
nice 和 renice 并不是神奇的加速工具,但它们提供了一种优雅、灵活的方式,让我们对进程的调度顺序施加影响。在服务器运维、批处理任务、资源抢占等场景中,合理使用这两个工具,不仅可以提升性能,还能避免“资源冲突”导致的系统卡顿。
来源:wljslmz一点号