VPS 提供商如何决定终止哪个进程?

VPS 提供商如何决定终止哪个进程?

他们几乎都向我承诺动态提供 x-MB RAM 和 y-MB。

我是一名程序员,但我不明白如果我分配内存并保留这么长时间,他们如何决定需要终止哪个进程。我的意思是,假设一个 php-fcgi 服务器实例运行到 500MB,我可以轻松终止它,但他们不应该终止我的 mysqld 或 lighttpd,因为它们只在启动时启动。

我检查了多家提供商的常见问题解答或支持表格,但都没能找到任何内容。

答案1

Linux 下消耗过多 RAM 的进程通常会被内核oom-killer进程终止。OOM 代表“内存不足”。您可以阅读它做出的决策过程的描述这里以及如何影响它的行为这里

答案2

一般来说,像这样的硬限制,超出限制的进程就会被终止。

答案3

我从未使用过 OpenVZ 或 Virtuozzo,但我的理解是这样的:

可突发 RAM 是 Virtuozzo 及其开源对应物 OpenVZ 的一项“功能”。在这些机器上,单个 VPS 实际上并没有运行自己的内核。在这些技术下,每个 VPS 在主机内核中都有两个限制,即 privvmpages 和 oomguarpages。

Privvmpages 设置为可爆发 + 保证 RAM 的总量,并且允许 VPS 中的进程分配最多该数量的内存。当主机的 RAM 不足时,它将开始终止所有分配了超过 oomgaurdpages RAM 的 VPS 中的进程。记住主机上的所有 VPS 的所有进程都在同一个内核中运行,这更容易理解。

我真的不知道 OpenVZ/Virtuozzo OOM 终止程序如何决定终止哪些进程。如果我在设计它,我可能会选择页面数大于 oomgaurpages 的 VPS,然后根据从进程年龄和大小计算出的分数在该 VPS 中选择一个进程,然后重复这个过程。不过就像我说的,我不知道他们到底是怎么做到的。

值得注意的是,在普通的 Linux 系统上,进程可以 malloc 大于交换空间 + RAM 总量,而不会出现问题。但当你要使用它时,它就会停止。在 OpenVZ/Virtuozzo 下,malloc 会失败。当进程希望自己管理内存时,这种情况在通常会有大量重复分配/释放的情况中相当常见。在这样的进程中,专用内存管理器可以有更高的性能。

相关内容