运行在LXC容器中的Linux / Ubuntu会理解cgroup内存限制吗?

我打算租用物理服务器,并在该服务器上的LXC容器中运行MySQL。 我想使用cgroup限制来控制MySQL实例的最大内存使用量:

lxc.cgroup.memory.limit_in_bytes = 8192M 

这将有效地控制容器可以使用多less内存,但容器内的topfree内容仍然会报告LXC主机(物理服务器)的整体内存。 我并不是Linux如何pipe理内存的专家,但我认为 – 在物理机器上 – 如果Linux发现它即将达到物理内存限制,它将开始交换。 Linux是否以相同的方式处理“有效的”内存限制(无论是cgroup限制还是物理限制),无论它在容器内还是在物理主机上运行?

Linux内核没有运行,因为Linux是内核,您可以与主机共享。 你的应用程序(如free和top)从/ proc读取系统信息,从而获得有关主机的详细信息,因为lxc在默认情况下不会伪造有限的资源(与OpenVZ相反)。 这是可以的,除非你的应用根据ram / swap / cpu号码的行为不同。 如果您的应用程序试图分配更多的内存,而不是可用的容器,那么将会像非容器环境中的任何其他应用程序一样被OOM杀死。

如果要查看容器内的有限资源,请在主机上执行以下操作:

 apt-get install lxcfs 

之后重新启动容器。 LXCFS将在容器的/ proc中模拟一些文件,应用程序将正确地看到有限的资源(cpu,ram,swap)。

有关lxcfs主页的更多信息: https ://linuxcontainers.org/lxcfs/

lxc – 内核命名空间

cgroups – 监视资源消耗和限制的内核子系统

lxc容器系统内部不知道主机操作系统上cgroup的限制。 Linux内核(在主机上)将限制cgroup对资源的消耗。

lxc和cgroup – 两个独立的内核子系统。 我们可以使用没有lxc的cgroup和没有cgroup的lxc。

Openvz – 它有一套内核补丁,用于正确显示容器中的容器限制,但是它们并不包含在内核中