网站搜索

如何使用 Nice 和 renice 命令设置 Linux 进程优先级


在本文中,我们将简要解释内核调度程序(也称为进程调度程序)和进程优先级,这些主题超出了本指南的范围。然后我们将深入了解 Linux 进程管理:了解如何以修改的优先级运行程序或命令,以及如何更改正在运行的 Linux 进程的优先级。

另请阅读:如何监控 Linux 进程并基于每个用户设置进程限制

了解 Linux 内核调度程序

内核调度程序是内核的一个单元,它从所有可运行的进程中确定接下来执行的最合适的进程;它在系统上的可运行进程之间分配处理器时间。可运行进程是一个只等待 CPU 时间的进程,它已准备好执行。

调度程序构成了 Linux 中多任务处理的核心,它使用基于优先级的调度算法在系统中的可运行进程之间进行选择。它根据最值得的进程以及对 CPU 时间的需求对进程进行排名。

了解进程优先级和良好的价值

内核存储了大量有关进程的信息,包括进程优先级,即附加到进程的调度优先级。具有较高优先级的进程将先于具有较低优先级的进程执行,而具有相同优先级的进程则被一个接一个地重复调度。

Linux 中总共实现了 140 个优先级和两个不同的优先级范围。第一个是好值 (niceness),范围从 -20(最高优先级值)到 19(最低优先级值),默认值为 0,这是我们将在本指南中发现的内容。另一种是实时优先级,默认范围是199,然后是100139用于用户空间。

Linux 的一个重要特性是基于优先级的动态调度,它允许根据您的需要更改(增加或减少)进程的好值,我们稍后会看到。

如何检查 Linux 进程的良好价值

要查看进程的良好值,我们可以使用 ps、top 或 htop 等实用程序。

使用 ps 命令以用户定义的格式查看进程的好值(这里的NI列显示了进程的好度)。

ps -eo pid,ppid,ni,comm

或者,您可以使用 top 或 htop 实用程序来查看 Linux 进程的好值,如图所示。

top
htop

PR 或 PRI 与 NI 之间的区别

从上面的 tophtop 输出中,您会注意到有一个名为 PRPRI 的列它显示了进程的优先级。

因此,这意味着:

  • NI – 是nice值,这是一个用户空间的概念,而
  • PRPRI – 是 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 1055teamspe+ 的良好度现在为 -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。

有关更多信息,请阅读 nicerenice 的手册页:

man nice
man renice 

您可能还想阅读以下有关 Linux 进程管理的文章。

  1. 如何在 Linux 中查找并终止正在运行的进程
  2. Linux 中终止进程的 Kill、Pkill 和 Killall 命令指南
  3. 如何监控系统使用情况、中断并对 Linux 服务器进行故障排除
  4. CPUTool – 限制和控制 Linux 中任何进程的 CPU 使用率

在本文中,我们简要解释了内核调度程序、进程优先级,了解了如何以修改的优先级运行程序或命令,以及如何更改活动 Linux 进程的优先级。您可以通过下面的反馈表分享有关此主题的任何想法。