VPS提供商如何决定杀死哪个stream程?

几乎所有的人都向我保证x-MB RAM和y-MB是dynamic的。

我是一个程序员,但我不明白他们是如何决定哪个进程需要被杀死,如果我分配内存,并保持这么长时间,他们需要。 我的意思是让我们说一个php-fcgi服务器实例运行高达500MB,我没有问题,但它们不应该杀死我的mysqld或lighttpd,这只是在启动时间启动。

在我检查过的几个提供商的常见问题解答或支持forms中找不到任何东西。

在Linux下消耗过多内存的进程通常会被内核的oom-killer进程oom-killer 。 OOM代表“Out of Memory”。 你可以阅读它在这里做出的决策过程的描述,以及如何在这里影响它的行为。

一般来说,像这样的严格限制是超过被杀的限制的过程。

我从来没有使用OpenVZ或Virtuozzo,但这是我的理解:

可突发RAM是Virtuozzo及其开放源代码OpenVZ的“特性”。 在这些盒子上,单个VPS实际上并没有运行自己的内核。 在这些技术下,每个VPS在主机内核,privvmpages和oomguarpages上都有两个限制。

Privvmpages被设置为突发+ gauranteed RAM的总量,并且VPS内的进程被允许分配多达该内存量。 当主机在RAM上运行不足时,它将开始杀死分配了大于内存的所有VPS的进程。 记住主机上的所有VPS都在相同的内核中运行它们的所有进程,这使得这一点更容易理解。

我不知道OpenVZ / Virtuozzo OOM杀手如何决定要杀死哪个进程。 如果我正在devise它,我可能会select页数大于oomgaurpage的VPS,然后根据从过程年龄和大小计算的分数,冲洗,重复,在该VPS内select一个stream程。 虽然就像我说的,我不知道他们是怎么做到的。

需要注意的是,在一个普通的Linux系统上,一个进程可以比malloc总数量更多地存在。 这是当你去使用它,你停下来。 在OpenVZ / Virtuozzo下,malloc将会失败。 实际上,在进程希望pipe理内存本身时,通常会有很多重复的分配/释放操作,这是相当普遍的。 这个过程中的一个特殊目的内存pipe理器可以有更高的性能。