收集云服务器优惠信息
记录云服务器使用心得

Linux系统设置正在运行进程的Nice值和优先级

Linux内核调度程序(也称为进程调度程序)是内核的一个组件,负责从所有准备执行的进程中选择接下来运行的最合适的进程,它管理系统中这些进程之间的CPU时间分配。当一个进程仅等待CPU时间并准备好执行时,该进程被认为是可运行的。

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

在本文当中,小编将简要介绍Linux内核调度程序和进程优先级,主要包括如何使用修改后的优先级运行程序或命令,以及如何更改正在运行的Linux进程的优先级。

理解进程优先级和Nice值

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

Linux中总共实现了140个优先级和两个不同的优先级范围。第一个是Nice值(niceness),范围从-20(最高优先级值)到19(最低优先级值),默认值是0,这也是本文我们所以介绍的主要内容。另一个是实时优先级,默认范围为1到99 ,然后100到139是用于用户空间优先级。

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

检查Linux进程的Nice值

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

使用ps命令以用户定义的格式查看进程的nice值(此处NI列显示进程的niceness)。

ps -eo pid,ppid,ni,comm

查看Linux进程Nice值

或者,也可以使用top或htop实用程序来查看Linux进程的nice值,命令如下:

top
htop

使用Top命令检查Linux进程的nice值

使用Htop命令检查Linux进程的Nice值

PR或PRI与NI之间的区别

从上面的top和htop输出中,你会注意到有一个分别称为PRPRI的列,它显示了进程的优先级。因此,这意味着:

  • NI:这是nice值,它是一个用户空间的概念
  • PR或者PRI:进程在Linux内核中实际的优先级

计算PR或PRI值方法

优先级总数=140
实际优先级范围(PR或PRI):0到99
用户空间优先级范围:100到139

Nice值范围(NI):-20到19

PR = 20 + NI
PR = 20 + (-20 到 + 19)
PR = 20 + -20 到 20 + 19
PR = 0 到 39 ,与用户空间优先级100到139相对应

但是,如果看到一个rt而不是如下截图所示的数字,则基本上意味着该进程正在实时调度优先级下运行。

Linux rt进程

Linux运行具有给定Nice值的命令

接下来将介绍如何确定程序或命令的CPU使用率的优先级。如果你有一个非常占用CPU资源的程序或任务,同时你也知道它可能需要很长时间才能完成,则可以使用Nice命令将其设置为高或有利的优先级。

语法如下:

nice -n niceness-value [command args] 
或者
nice -niceness-value [command args] 	
或者
nice --adjustment=niceness-value [command args]

几下几点需要注意:

  • 如果未提供任何值,nice默认设置优先级为10。
  • 没有nice默认情况下运行的命令或程序的优先级为零。
  • 只有root权限才能运行具有更高优先级或高优先级的命令或程序。
  • 普通用户只能运行低优先级的命令或程序(即只能增加进程的Nice值)。

例如,你可以使用以下Nice命令以特定优先级启动程序或命令,而不是使用默认优先级启动程序或命令:

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
或者
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

此外,你还可以使用第三种方法,该方法有点令人困惑,特别是对于负的Nice值,不小心比较容易弄错:

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的teampe+的nice值现在为-12,并且对于用户apache拥有的所有进程而言,其nice值为-2

仍然使用这个输出,使用公式PR= 20 + NI,可以看到:

ts3server进程的PR = 20 + -12 = 8
apache进程的PR=20 + -2 = 18

查看PR值

使用renice命令对用户进程的nice值进行的任何更改都只适用于下次重新启动之前,要设置永久性的默认值,请阅读以下内容。

设置特定用户进程的默认Nice值

可以在/etc/security/limits.conf文件中设置特定用户或组的默认nice值,其主要功能是定义通过PAM登录的用户的资源限制。

为用户定义限制的语法如下(该文件中解释了各个列的可能值):

#<domain>   <type>  <item>  <value>

现在使用下面的语法,其中“hard”意味着强制执行硬限制(实际的限制值),“soft”意味着强制执行软限制(系统允许的临界值):

<username>  <hard|soft>  priority  <nice value>

或者,在/etc/security/limits.d/下创建一个文件,该文件覆盖上面主文件中的设置,这些文件按字母顺序读取。

例如,首先为用户ecscoupon创建文件/etc/security/limits.d/ecscoupon-priority.conf:

vi /etc/security/limits.d/ecscoupon-priority.conf

然后添加这个配置:

ecscoupon  hard  priority  10

保存并关闭文件。从现在开始,ecscoupon用户拥有的任何进程的nice值为10,PR为30。

有关更多信息,请阅读Nice和renice的手册页:

man nice
man renice

总结

本文小编主要介绍了Linux内核调度程序和进程优先级,同时包括使用修改后的优先级运行程序或命令,并更改了活动Linux进程的优先级。如果对Linux进程优先级不知道如何设置的话,可以参考上述教程。

简单来说,Linux内核调度程序是Linux操作系统内核的一部分,负责管理系统中运行的进程和线程的调度。它决定了在给定的时间点哪个进程或线程将在CPU上执行,并管理它们的执行顺序和时间片分配。

赞(0)
网站声明:本文内容由趣云笔记原创,部分资源收集于网络,如有侵权请联系企鹅:2472781824删除。
文章名称:《Linux系统设置正在运行进程的Nice值和优先级》
文章链接:https://www.ecscoupon.com/5948.html
本站资源仅供个人学习交流,未经允许不得转载,更不允许用于商业用途。如需转载,请注明来源,感谢理解!