Linux:限制一组进程的CPU和内存消耗

Linux:限制一组进程的CPU和内存消耗

在现代的 Ubuntu Server 机器上,我们需要托管大约 20 个 Web 应用程序。(稍后会添加更多应用程序。)

每个应用程序都是一个 nginx 虚拟主机,它通过 Unix Domain Socket 与一组相同的长寿命 FCGI 进程(内部编写)进行通信。

每个 Web 应用程序的 FCGI 流程都不同,但彼此仍然非常相似(只是一些细微的业务逻辑差异)。

通常,我们会为每个 Web 应用程序分配一个 Xen 虚拟机。但在这种情况下,内存开销太大了 — 这些进程很轻量,通常不会相互影响或争用资源。我们希望将所有这些东西托管在一个 Xen VM 中。

然而,仍有可能由于某些不可预见的错误,FCGI 进程变得异常活跃,消耗机器上的所有 CPU 和/或内存,从而影响其他 Web 应用程序。

我们希望将 Web 应用程序彼此隔离,以尽量减少一个 Web 应用程序的问题影响其他应用程序的可能性。

CPU 和内存资源是主要问题。如果能控制 IO 吞吐量等其他方面就更好了,但我觉得如果我们对此过于拘泥,那么最好还是使用 Xen,与系统管理工作成本相比,内存成本可以忽略不计。实际上,在我们的具体案例中,我们认为除了 CPU 和内存不足之外的其他问题都是低风险问题,如果发生这种情况,我们会接受其他 Web 应用程序最初会受到影响。

问题是:在我们的案例中,限制一组进程的 CPU 和内存消耗的正确方法是什么?

答案1

我不知道什么是“正确”的方法(我怀疑根本没有)。除了使用虚拟机……

您可以使用 (re)nice(生成的进程从其父进程继承优先级)来限制进程的调度。您可以使用 tasket 将进程(或进程组)隔离到单个 CPU。并且可以使用 ulimit 设置各种内存使用限制。

有可能由于某些不可预见的错误,FCGI 进程会变得异常,并消耗所有 CPU 和/或内存

也许你应该考虑一下看门狗?

根据流量和性能要求,使用 CGI 而不是 FCGI 也许是一个好主意?

相关内容