我有一个以大约 100% CPU 运行的进程。所以我用nice运行它:
$ nice /dir/myamd.sh
该top
命令显示我的进程仍然运行接近 100%(可能略低,如 99%)。该nice
命令真的有效吗?
谢谢大家的回复!我可以同时使用nice
和cpulimit
吗?因为我希望我的进程产量高于其他进程,并且仅以 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
答案4
在你的例子中,它可能是不是在职的。
你是不是在后台运行该程序 (&)。所以这可能是在此 TTY 上运行的唯一程序(除了启动它的 shell)。
如果您在不同的 TTY(例如不同的终端窗口)上运行第二个程序,则这两个程序的相对良好级别将不会产生明显的效果。