我只是想寻求一些关于某个流程的优良价值的澄清,或者如果我的操作完全错误的话,也许寻求一些建议。
假设我在一台机器上有几十个 Web 服务器进程,我担心其中任何一个进程出现故障并占用所有系统资源。我立即想到了友好度 - 我会给它们所有正友好度值,这样它们就会使用任何可用资源,但如果有需求,它们就会放弃这些资源。这会像我预期的那样表现吗?或者,如果它们都具有相同的友好度值,那么本质上是否与它们都为 0 相同?
基本上,我想知道如果所有进程都具有相同的优先级值并且都需要资源,内核如何决定哪些进程应该获得优先级?由于只有 39 个可能的优先级(-20 到 +19 irc),如果这样工作,我无法为每个服务器提供不同的值。
如能对此作出任何澄清,我们将不胜感激。
我遇到的一些其他防止霸占的解决方案:
cpulimit
实用程序(对我来说是段错误)ulimit
- 按用户计算,这对我来说听起来很理想,因为每个服务器都有自己的用户,尽管它只提供 cputime 作为 cpu 资源使用量的测量。我很好奇这是否意味着经过的时间或每秒 cpu 时间的百分比或其他什么。- 过程控制组 - 从对谷歌搜索结果的初步浏览来看,这似乎是一个更为复杂的解决方案,但可能不得不这么做。
答案1
首先,我建议你的 Linux 发行版可能已经配置好了一些东西,如果你开始修改系统范围的良好值的话,最后的结果会比你想象的要好。
其次,我认为 nice 不会达到你想要的效果。它确实有一定效果,但并不像你想象的那么显著。调度程序的类型及其内部规则集的效果更显著。此外,你可能遇到的问题与内存使用有关,而不是 CPU 时钟时间,因此 nice 不太可能解决问题。
该ulimit
系统可能更符合您所想的。
但我的主要建议是仅解决现实世界的问题。在事情发生之前担心会导致你用胶带和打包线修补系统,以解决稻草人问题。当你遇到真正的问题时,最好的解决方案会更加明显。当然,架构纠正和为最坏的情况做计划是一件好事,但在这种情况下,你的 Linux 发行版可能已经为你完成了大部分工作。