如何使用 Nice 和 renice 命令设置 Linux 进程优先级
在本文中,我们将简要解释内核调度程序(也称为进程调度程序)和进程优先级,这些主题超出了本指南的范围。然后我们将深入了解 Linux 进程管理:了解如何以修改的优先级运行程序或命令,以及如何更改正在运行的 Linux 进程的优先级。
另请阅读:如何监控 Linux 进程并基于每个用户设置进程限制
了解 Linux 内核调度程序
内核调度程序是内核的一个单元,它从所有可运行的进程中确定接下来执行的最合适的进程;它在系统上的可运行进程之间分配处理器时间。可运行进程是一个只等待 CPU 时间的进程,它已准备好执行。
调度程序构成了 Linux 中多任务处理的核心,它使用基于优先级的调度算法在系统中的可运行进程之间进行选择。它根据最值得的进程以及对 CPU 时间的需求对进程进行排名。
了解进程优先级和良好的价值
内核存储了大量有关进程的信息,包括进程优先级,即附加到进程的调度优先级。具有较高优先级的进程将先于具有较低优先级的进程执行,而具有相同优先级的进程则被一个接一个地重复调度。
Linux 中总共实现了 140 个优先级和两个不同的优先级范围。第一个是好值 (niceness),范围从 -20
(最高优先级值)到 19
(最低优先级值),默认值为 0
,这是我们将在本指南中发现的内容。另一种是实时优先级,默认范围是1到99,然后是100到139用于用户空间。
Linux 的一个重要特性是基于优先级的动态调度,它允许根据您的需要更改(增加或减少)进程的好值,我们稍后会看到。
如何检查 Linux 进程的良好价值
要查看进程的良好值,我们可以使用 ps、top 或 htop 等实用程序。
使用 ps 命令以用户定义的格式查看进程的好值(这里的NI
列显示了进程的好度)。
ps -eo pid,ppid,ni,comm
或者,您可以使用 top 或 htop 实用程序来查看 Linux 进程的好值,如图所示。
top
htop
PR 或 PRI 与 NI 之间的区别
从上面的 top 和 htop 输出中,您会注意到有一个名为 PR
和 PRI
的列它显示了进程的优先级。
因此,这意味着:
NI
– 是nice值,这是一个用户空间的概念,而PR
或PRI
– 是 Linux 内核所看到的进程的实际优先级。
如何计算 PR 或 PRI 值
Total number of priorities = 140
Real time priority range(PR or PRI): 0 to 99
User space priority range: 100 to 139
尼斯值范围 (NI):-20 至 19
PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20 to 20 + 19
PR = 0 to 39 which is same as 100 to 139.
但是,如果您看到 rt 而不是数字(如下面的屏幕截图所示),则基本上意味着该进程正在实时调度优先级下运行。
如何在 Linux 中运行具有给定 Nice 值的命令
在这里,我们将了解如何确定程序或命令的 CPU 使用率的优先级。如果您有一个非常占用 CPU 资源的程序或任务,但您也知道它可能需要很长时间才能完成,则可以使用nice 命令将其设置为高或有利的优先级。
语法如下:
nice -n niceness-value [command args]
OR
nice -niceness-value [command args] #it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]
重要的:
- 如果未提供任何值,nice 默认设置优先级为 10。
- 没有nice默认情况下运行的命令或程序的优先级为零。
- 只有 root 才能运行具有更高优先级或高优先级的命令或程序。
- 普通用户只能运行低优先级的命令或程序。
例如,您可以使用以下 Nice 命令以特定优先级启动程序或命令,而不是使用默认优先级启动程序或命令。
sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*
您还可以使用第三种方法,该方法有点令人困惑,尤其是对于负的好感值。
sudo nice -5 tar -czf backup.tar.gz ./Documents/*
更改Linux中进程的调度优先级
正如我们之前提到的,Linux 允许基于优先级的动态调度。因此,如果程序已经在运行,您可以使用以下形式的 renice 命令更改其优先级:
renice -n -12 -p 1055
renice -n -2 -u apache
从下面的示例 top 输出中,PID 1055 的 teamspe+ 的良好度现在为 -12
并且对于所有用户 apache 拥有的进程为 -2
。
仍然使用此输出,您可以看到公式 PR=20 + NI 成立,
PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18
您使用renice命令对用户进程的nice值所做的任何更改仅在下次重新启动之前适用。要设置永久默认值,请阅读下一节。
如何设置特定用户进程的默认 Nice 值
您可以在/etc/security/limits.conf文件中设置特定用户或组的默认nice值。其主要功能是定义通过 PAM 登录的用户的资源限制。
为用户定义限制的语法如下(文件中解释了各个列的可能值):
#<domain> <type> <item> <value>
现在使用下面的语法,其中“硬”意味着强制执行硬链接,“软”意味着强制执行软限制。
<username> <hard|soft> priority <nice value>
或者,在 /etc/security/limits.d/ 下创建一个文件,该文件将覆盖上面主文件中的设置,并且这些文件将按字母顺序读取。
首先为用户 howtoing 创建文件 /etc/security/limits.d/howtoing-priority.conf:
vi /etc/security/limits.d/tecmint-priority.conf
然后在里面添加这个配置:
tecmint hard priority 10
保存并关闭文件。从现在开始,howtoing拥有的任何流程都将具有10的良好价值和30的PR。
有关更多信息,请阅读 nice 和 renice 的手册页:
man nice
man renice
您可能还想阅读以下有关 Linux 进程管理的文章。
- 如何在 Linux 中查找并终止正在运行的进程
- Linux 中终止进程的 Kill、Pkill 和 Killall 命令指南
- 如何监控系统使用情况、中断并对 Linux 服务器进行故障排除
- CPUTool – 限制和控制 Linux 中任何进程的 CPU 使用率
在本文中,我们简要解释了内核调度程序、进程优先级,了解了如何以修改的优先级运行程序或命令,以及如何更改活动 Linux 进程的优先级。您可以通过下面的反馈表分享有关此主题的任何想法。