如何判断“nice”命令是否有效?

如何判断“nice”命令是否有效?

我有一个以大约 100% CPU 运行的进程。所以我用nice运行它:

$ nice /dir/myamd.sh

top命令显示我的进程仍然运行接近 100%(可能略低,如 99%)。该nice命令真的有效吗?

谢谢大家的回复!我可以同时使用nicecpulimit吗?因为我希望我的进程产量高于其他进程,并且仅以 80% CPU 为例。

答案1

Nice 改变进程的相对优先级。如果没有其他东西需要CPU,那么仍然没有其他东西具有更高的优先级,因此它可以继续使用100%的CPU。

许多现代机器都有多个核心,因此,如果您有 4 个核心,但只有 3 个进程可以运行,那么这是另一个示例,其中进程可以使用 100% 的核心,而不管良好级别如何。

答案2

top并将ps lax在该栏中显示系统上所有进程当前的良好级别NI

良好级别和 CPU 负载的类比

将 CPU 想象成超市收银台的收银员。如果您有一个多核 CPU,则有多个。

每个柜台都有一队顾客等待付款。这是CPU的运行队列。

队列的长度就是当前CPU的负载。这就是此刻柜台后面的人的负担。

队列中的一个人可能是好的对于后面的人来说,如果他们真的需要快点的话,完全可以让他们在队列中超过他们。

柜台收银员还有同样多的工作要做, 和仍然以同样的速度工作(100%,直到队列为空),但是队列中的人将按顺序到达柜台,具体取决于他们对队列中其他人的友善程度。

在你的例子中,超市可能很空,但是有一位顾客带着他的大手推车需要结账,收银员正在尽最大努力处理他购买的所有东西。他虽然非常好...但这并不重要,收银员不会放慢速度来有时间聊天。

在 Unix 系统上,与超市不同,CPU 只会处理一个进程一段时间,然后再将它们发送回队列。这样一来,一个进程就不会阻塞其他进程。

您甚至可以将上下文切换挤入这个类比中。这是 CPU 从处理一个进程切换到处理另一个进程的情况,如果过于频繁地执行此操作可能会非常耗时。这基本上就是在柜台为顾客提供服务之间发生的事情;将加工后的食品放入袋子等所需的时间,以及下一位顾客向前走、说“嗨”等所需的时间。

注意:我在上面使用“CPU”,在某些情况下我应该说“内核”。从用户体验的角度来看,没有什么区别。

答案3

nice命令按设计运行,只是不按您的预期运行。

如果您确实想要限制 CPU 使用率并可能浪费可用的 CPU 资源,您可以使用:

cpulimit -l 25 /dir/myamd.sh

CPU限制将监视 myadm.sh CPU 使用率并使用 SIGSTOP/SIGCONT 对其进行限制,以将其平均使用率保持在(一个 vCPU)限制的 25% 以下。在多核/线程系统上,您可以将使用率限制在 100% 以上。

更有效的替代方法是使用cgroups,参见例如这个博客了解详情。

答案4

在你的例子中,它可能是不是在职的。

你是不是在后台运行该程序 (&)。所以这可能是在此 TTY 上运行的唯一程序(除了启动它的 shell)。

如果您在不同的 TTY(例如不同的终端窗口)上运行第二个程序,则这两个程序的相对良好级别将不会产生明显的效果。

https://unix.stackexchange.com/a/277633/29483

相关内容