O Linux / Ubuntu em execução em um contêiner LXC entende os limites de memória do cgroup?

1

Estou planejando alugar um servidor físico e executar o MySQL dentro de um contêiner LXC nesse servidor. Gostaria de controlar o uso máximo de memória para a instância do MySQL usando limites de cgroup:

lxc.cgroup.memory.limit_in_bytes = 8192M

Isso controlará efetivamente a quantidade de memória que o contêiner pode usar, mas top ou free dentro do contêiner ainda relatará a memória geral para o host LXC (servidor físico). Eu não sou especialista em como o Linux gerencia a memória em geral, mas eu suponho que - em uma máquina física - o Linux começará a trocar se ele ver que está prestes a atingir um limite de memória física. O Linux lida com o limite de memória "efetivo" (seja limite de cgroup ou limite físico) da mesma maneira, independentemente de ele ser executado dentro de um contêiner ou em um host físico?

    
por sbrattla 09.03.2016 / 11:45

2 respostas

2

Não há Linux rodando dentro do container, já que o Linux é o kernel e você o compartilha com o host. Seus aplicativos (como free e top) leem as informações do sistema de / proc e, portanto, obtêm detalhes sobre o host, pois o lxc não falsifica os recursos limitados por padrão (em contraste com, por exemplo, o OpenVZ). Está tudo bem, a menos que seu aplicativo tenha um comportamento diferente dependendo dos números de ram / swap / cpu. Se o seu aplicativo tentar alocar mais memória do que o disponível para o contêiner, ele será morto como qualquer outro aplicativo em um ambiente que não seja contêiner.

Se você quiser ver os recursos limitados dentro do contêiner, faça o seguinte no host:

apt-get install lxcfs

Depois, reinicie o contêiner. O LXCFS emulará alguns arquivos em / proc do contêiner e os aplicativos verão os recursos limitados (cpu, ram, swap) adequadamente.

Mais informações na página inicial do lxcfs: link

    
por 09.03.2016 / 23:02
2

lxc - namespaces do kernel

cgroups - subsistema de kernel que monitora o consumo de recursos e limites

O sistema de contêiner lxc interno não conhece os limites do cgroup no host os. O kernel do Linux (no host) limitará o consumo de recursos por cgroup.

lxc e cgroup - dois subsistemas de kernel independentes. Podemos usar o cgroup sem lxc e lxc sem cgroup.

Openvz - Ele tem um conjunto de patches do kernel para a exibição correta dos limites do container no container, mas eles não levam em conta o kernel vanilla

    
por 09.03.2016 / 20:17