Use cgroup para limitar o uso de memória do virtualbox

9

Estou tentando usar cgroup(grupo de controle) para limitar o uso de memória do virtualbox, mas ele não parece funcionar.

Minha máquina é:

$ uname -a
Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux

Eu tentei fazê-lo funcionar assim:

  1. Criando novos cgroups sob a hierarquia de memória:

    $ cgcreate -g memory:vbox
    
  2. Configurando memory.limit_in_bytes para vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Agrupando o vbox executando o pid no vbox:

    $ cgclassify -g memory:vbox 20015
    

Alguém pode explicar por que isso não está funcionando?

Gilles 'SO- parar de ser mau'
fonte

Respostas:

3

você pode limitar o uso da memória com /etc/security/limits.conf neste arquivo que você coloca:

domain type item value

onde o domainé o @groupname, typeé hardou softonde hardé o limite que não pode ser excedido em nenhuma circunstância.

itemé o campo do item especifica que tipo de item está sendo limitado. Os exemplos incluem núcleo (o tamanho dos arquivos principais), dados (o tamanho da área de dados de um programa), fsize (o tamanho dos arquivos criados pelo usuário), nofile (o número de arquivos de dados abertos), rss (o conjunto residente tamanho), pilha (o tamanho da pilha), CPU (o tempo de CPU de um único processo em minutos), nproc (o número de processos simultâneos), maxlogins (o número de logons simultâneos) e prioridade (a prioridade do processo). Os dados, rss e itens da pilha estão relacionados à memória consumida por um programa. Essas e outras medidas de capacidade de dados são medidas em kilobytes.

e valuese relacionam com o itemcampo que você tem escolheu, por exemplo, se você tem escolheu cpuno itemcampo e colocar 2na valueentão no caso de o domain(você grupo de VirtualBox) é preciso mais do que 2do tempo da CPU será encerrado.

Você pode usar ulimittambém, mas restrito apenas ao shell bash.

Espero que isso ajude você em seu objetivo, embora não seja feito com o método solicitado.

Hanan N.
fonte
1

Acho que há algo errado com seu /etc/cgconfig.confarquivo. Essa configuração funciona para mim:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

[root@localhost cgroup]# service cgconfig start
Starting cgconfig service:                                 [  OK  ]
[root@localhost cgroup]# ls
memory
[root@localhost cgroup]# ls memory/
cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           release_agent
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes       tasks
[root@localhost cgroup]# cgcreate -g memory:vbox
[root@localhost cgroup]# cgset -r memory.limit_in_bytes=512M vbox
[root@localhost cgroup]# cgclassify -g memory:vbox 11727
[root@localhost cgroup]# cat memory/vbox/tasks 
11727

Embora, em vez de usar os comandos cgreatee cgset, recomendo que você crie um /etc/cgconfig.confarquivo que inclua essas configurações para que você não precise repetir o processo após cada reinicialização. No seu caso, o arquivo ficaria assim:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

group vbox {
    memory {
        memory.limit_in_bytes="536870912";
    }
}

Agora, toda vez que você iniciar o cgconfigserviço, você terá seu vbox cgroup pronto. Tudo o que é necessário é mover o PID da caixa virtual para o /cgroups/memory/vbox/tasksarquivo usando um cgclassifyou simplesmente echoo número desse arquivo.

mart1n
fonte