如何在Linux上使用NICE和RENICE设置进程优先级

NICE和RENICE命令允许您通过调整进程的优先级来微调内核处理进程的方式。阅读本教程,了解如何在Linux和类似Unix的操作系统(如MacOS)中使用它们。

这完全是个过程问题

在您的Linux或类Unix计算机中,甚至在您启动要使用的应用程序之前,就会有许多进程在运行。这些进程中的大多数都是Linux本身的重要元素,或者是图形桌面环境的支持进程。幕后发生了很多事情。当然,可以分配的系统资源和CPU时间有限。Linux内核是所有这些进程的控制器。

内核必须决定哪些进程现在获得关注和资源,哪些进程必须等待。内核不断地调整进程和优先级,以确保计算机尽可能平稳地运行,并确保所有进程都能获得适当的份额。有些工艺会得到优惠待遇。它们对计算机的一般操作是如此重要,以至于它们的需求必须排在(比方说)您的浏览器之前。

物美价廉

用于确定内核如何处理进程的标准之一是nice值。每个过程都有很好的价值。nice值是一个介于-19到20之间的整数。所有标准进程都是以nice值为零启动的。

这里的诀窍是,nice值越高,您的进程对其他进程的态度就越好。也就是说,较高的nice值告诉内核该进程乐于等待,负数则是美好的反义词。负的NICE值越大,这个过程就越自私。它试图获得尽可能多的CPU时间,而不考虑其他进程。

我们可以在进程启动时使用NICE命令设置NICE值,也可以使用renice调整正在运行的进程的NICE值。

NICE命令

我们可以使用NICE命令在启动程序时调整该程序的NICE值。这允许我们相对于其他进程增加或降低内核给予该进程的优先级。

让我们假设一位程序员已经编写了一个名为Ackermann的程序。这将计算Ackerman函数。它是CPU和内存密集型产品。程序员可以使用以下命令启动程序:

./ackermann

我们可以使用top命令查看正在运行的程序。

top

我们可以在上面看到艾克曼项目的细节。数值为“NI列”中的数字。正如我们预期的那样,它被设为零。

让我们重新启动它,这一次使它不那么苛刻。“我们将为Ackermann程序设置一个很好的值15,如下所示。键入NICE、空格、-15、另一个空格,然后输入要启动的程序的名称。在我们的示例中,我们虚构的程序员使用./Ackermann。

nice -15 ./ackermann

请注意,“-15”不是负15。是正十五。需要“-”来告诉NICE我们正在传递一个参数。要指示负数,您必须键入两个“-”字符。

如果我们现在重新开始top,我们可以看到Ackermann行为的变化。

top

Ackermann的值很不错,为15,因此不会消耗最多的CPU时间。GNOME和Rhythmbox都在使用更多。我们已经把阿克曼控制住了。

现在让我们反其道而行之,给Ackermann一个负的nice值。注意两个“-”字符的使用。要使应用程序更自私、更不友好,必须使用sudo。任何人都可以让他们的应用程序变得更好,但只有超级用户才能让人变得更自私。

sudo nice --10 ./ackermann

让我们跑到最上面,看看这有什么不同。

top

这一次,阿克曼的值很不错,为-10。它又回到了第一位,并且比以前消耗了更多的CPU时间。

renice命令

renice命令允许我们调整正在运行的进程的nice值。我们不需要停止它,然后用NICE重新启动它。我们可以动态设置新值。

renice命令将进程的进程ID或PID作为命令行参数。我们可以从顶部的“PID”列提取进程ID,也可以使用ps和grep为我们查找它,如下所示。显然,您将键入用户名,而不是Dave;键入您感兴趣的进程名称,而不是Ackermann。

ps -eu dave | grep ackermann

现在我们有了PID,我们可以使用它了。我们将把Ackermann重新设置为更好的行为,值为5。要更改正在运行的进程的nice值,您必须使用sudo。请注意,5个参数上没有“-”。正数不需要一个,负数只需要一个,而不是两个。

sudo renice -n 5 2339

我们得到确认,Renice已经更改了nice值。它向我们展示了旧的价值和新的价值。

内核通常在处理优先级、分配CPU时间和系统资源方面做得很好。但是,如果您有一个很长的CPU密集型任务要运行,并且您并不关心它什么时候结束,那么如果您为该任务设置一个更高的较好的值,它会使您的计算机运行得更流畅一些。那对每个人来说都会更好。

相关文章