linux中进程优先级的nice和renice命令用法示例

时间:2020-03-21 11:46:26  来源:igfitidea点击:

在Linux机器上,有数百个进程正在连续运行以执行某些或者其他任务。
Linux内核在这些进程之间进行中介以及为这些进程分配CPU方面做得非常出色。

当我们读到“内核将CPU分配给所有进程”这一行时,就会出现一个有趣的问题。

  • 使计算机执行给定的任务,那么内核将如何了解某个特定的进程,我想优先考虑将其排在首位?

这个问题的答案是:“实际上,我们可以要求内核将特定进程置于比其他进程更高的优先级”。

借助Linux中称为“ Nice”的命令,可以轻松实现这一目标。

Linux中的nice命令有什么作用?

借助Linux中的Nice命令,我们可以设置进程优先级。
如果给进程更高的优先级,则内核将为该进程分配更多的cpu时间。

默认情况下,在Linux中启动程序时,程序的启动优先级为'0'。
但是,我们可以通过以下两种方法之一来更改程序的优先级。

  • 我们可以使用所需的优先级启动程序。
  • 或者,我们也可以更改已经运行的进程的优先级。

如何查看在Linux中运行的进程的优先级?

我们可以通过使用带有“ -al”选项的ps命令来查看进程优先级,如下所示。

F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  4075  4057  15   0   4664  1504 -      Ss+  pts/0      0:00 -bash
4     0  4481     1  15   0   1656   436 -      Ss+  tty2       0:00 /sbin/minge
tty tty2
4     0  4485     1  15   0   1656   436 -      Ss+  tty3       0:00 /sbin/minge
tty tty3
4     0  4488     1  19   0   1656   452 -      Ss+  tty4       0:00 /sbin/minge
tty tty4

以“ NI”开头的列显示了不错的值(过程的优先级)。
我们可以清楚地看到它们中的大多数优先级为“ 0”。

我们还可以使用“ top”命令查看进程优先级(nice值)。
下面显示的是top命令的示例输出。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8018 root      15   0  2192  908  716 R  2.0  0.2   0:00.01 top
    1 root      15   0  2064  624  536 S  0.0  0.1   0:03.13 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.24 events/0
    6 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper
    7 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread
   10 root      10  -5     0    0    0 S  0.0  0.0   0:02.73 kblockd/0

在上面显示的顶部命令输出中,可以从“ NI”列中看到不错的值(过程优先级)。

了解Linux中的Nice命令

Linux中nice命令的语法非常简单,可以通过以下方法列出nice命令的帮助。

[root@myvm1 ~]# nice --help
Usage: nice [OPTION] [COMMAND [ARG]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Nicenesses range from
-20 (most favorable scheduling) to 19 (least favorable).

  -n, --adjustment=N   add integer N to the niceness (default 10)
      --help     display this help and exit
      --version  output version information and exit

NOTE: your shell Jan have its own version of nice, which usually supersedes
the version described here.  Please refer to your shell's documentation
for details about the options it supports.

Report bugs to <[email protected]>.

-n和--adjustment可用于设置进程的优先级。
我们也可以使用-<required number>将进程的优先级设置为该值。

例如

nice -10 <命令名称>将设置优先级为“ 10”的进程。

不带任何选项运行nice命令将为我们提供当前Shell运行的优先级。

[root@myvm1 ~]# nice
0
[root@myvm1 ~]#

nice优先级值的范围是多少?

进程优先级值的范围是-20到19.

优先级最高的值为-20的进程。
优先级列表上的值为19的进程被认为较低。

仔细理解以上内容,数值高的数字的优先级较低,数值低的数字的优先级较高。

使用不带任何选项的漂亮命令运行一个进程会将该进程的优先级设置为10.
(因此,无需任何选项就可以大大提高进程的优先级。

普通用户只能降低其处理优先级。
但是,root用户可以增加/减少所有进程的优先级。

让我们澄清一下在使用nice方面主要存在的困惑。

nice -10 <command name>  and nice -n 10 <command name> 

将执行相同的操作(以上命令均会将进程优先级设置为10)。

关于nice命令的一个主要误解是,nice -10 <command name>将以-10(优先级更高)运行该进程。

为了给命令分配-10优先级,我们应该如下所示运行它。

nice --10 <command name>

记下double-,第一个是命令option(-),第二个是数字-(减号)。

注意:启动时只能使用nice命令更改进程优先级。
我们不能使用nice命令更改已经运行的进程的优先级。

更改Linux中已经运行的进程的优先级

为了更改已经运行的进程的优先级,可以使用“ renice”命令。

假设我们发现机器由于某个冗长的进程(目前不是必需的进程)而运行缓慢,那么可以借助renice命令降低该进程的优先级。
同时还增加了所需流程的优先级。

renice命令与nice命令非常相似(优先考虑选项选项),但是在参数方面确实略有不同。
我们可以在renice命令中提供用户名,组名等作为参数。

renice命令的一些示例如下:

renice -4 -p 3423(这会将进程id 3423的优先级设置为-4,这将反过来增加其优先级)

renice 13 -p 3564 -u sarath(这会将进程ID 3564的优先级设置为13,而用户“ sarath”拥有的所有进程的优先级都设置为13)

renice 14 -u sarath,theitroad -g custom(这会将“ sarath”,“ theitroad”以及“ custom”组拥有的所有进程都设置为14)