是我一个人的问题,还是 renice 的手册页含糊不清?

是我一个人的问题,还是 renice 的手册页含糊不清?

我正在考虑重新调整某些进程,以便它们在服务器上的重负载下保持响应。

我读了 renice 的简短手册页,每次重读时我对它的理解都会减少。它说它改变了调度优先级。然而,优先级与良好性相反,因此考虑到该命令称为 renice,这是令人惊讶的。进一步阅读,他们在描述部分讨论了调度优先级。

有用的优先级是:19(受影响的进程只有在系统中没有其他进程想要运行时才会运行)、0(“基本”调度优先级)、任何负数(使事情进展得非常快)。

这与 top 命令中看到的良好性和优先级之间的关系不相符。从人的顶部:

任务的美好价值。负的nice值意味着更高的优先级,而正的nice值意味着更低的优先级。该字段中的零仅意味着在确定任务的调度能力时不会调整优先级。

在top的世界中,优先级与niceness相反,单独的PR字段显示优先级值,对于运行速度更快的进程来说,优先级值更高。

在 renice 的世界中,优先级和良好性被视为相同的值。事实上,renice -n 显然等同于 renice --priority。

renice 手册页中给出的示例似乎在许多系统上都很有用:提高根进程的速度。然而,如果我没记错的话,它实际上是在降低速度。我觉得这是一个误导性的例子,或者至少解释得很差。

事实上,值要么是增量,要么是优先级,没有命令标志来区分两者。所以可以用renice+1,也可以用renice-1。但是 -1 可以是优先级或增量,那么它被解释为哪一个呢?我只能猜测renice -1 root会做什么,或者通过实验来确定。似乎没有逻辑方法可以从手册页确定这会做什么。

“好人”能否解释一下什么命令可以使根进程运行得更快一点,以及我如何解释以后的手册页?

答案1

作为非 root,我不应该能够获得更快的优先级。因此,确实正数较慢,负数较快:

$ renice -n -10 6341
renice: failed to set priority for 6341 (process ID): Permission denied
$ renice -n +10 6341
6341 (process ID) old priority 0, new priority 10
$ renice -n 0 6341
renice: failed to set priority for 6341 (process ID): Permission denied

这也与ps显示的内容相匹配,它SN+现在显示该进程(正在睡觉,很好,在前台)。手册页描述N为“低优先级(对其他用户有利)”。给它一个负数,因为 root 会将其变成S<+,其中<是“高优先级(对其他用户不好)”


你是对的,文档看起来确实令人困惑。 BSD 似乎具有基本相同的手册页renice,因此很难在那里找到更好的描述。 POSIX 文本似乎也不清楚,它将好值定义为

3.244 Nice Value
用作系统建议以改变进程调度的数字。当调度进程运行时,数值较小的值会给予进程额外的优先权。数值较大的值会降低优先级并降低进程运行的可能性。

进而说的renice -n

指定如何调整指定进程的nice值。增量选项参数是一个正或负的十进制整数,用于修改指定进程的nice值。

正增量值将导致较低的好值。负增量值可能需要适当的权限,并且会导致更高的好值。

第二段似乎与好的价值定义相矛盾。

相关内容