Utilizzare cgroup per limitare l'utilizzo della memoria di virtualbox


9

Sto cercando di utilizzare cgroup(Gruppo di controllo) per limitare l'utilizzo della memoria di virtualbox, ma sembra non funzionare.

La mia macchina è:

$ 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

Ho provato a farlo funzionare in questo modo:

  1. Creazione di nuovi cgroup nella gerarchia di memoria:

    $ cgcreate -g memory:vbox
    
  2. Impostazione memory.limit_in_bytes per vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Raggruppamento di vbox che esegue pid su vbox:

    $ cgclassify -g memory:vbox 20015
    

Qualcuno può spiegare perché questo non funziona?

Risposte:


3

potresti limitare l'uso della memoria con /etc/security/limits.conf in questo file che hai inserito:

domain type item value

dove domainè il @groupname, typeè hardo softdove hardè limitato che non può essere superato in nessuna circostanza.

itemè il campo dell'articolo specifica quale tipo di oggetto è limitato. Esempi includono core (la dimensione dei file core), dati (la dimensione dell'area dati di un programma), fsize (la dimensione dei file creati dall'utente), nofile (il numero di file di dati aperti), rss (il set residente size), stack (la dimensione dello stack), cpu (il tempo della CPU di un singolo processo in minuti), nproc (il numero di processi simultanei), maxlogin (il numero di accessi simultanei) e priorità (la priorità del processo). Gli elementi data, rss e stack si riferiscono tutti alla memoria consumata da un programma. Queste e altre misure della capacità di dati sono misurate in kilobyte.

e valuesi riferiscono al itemcampo che avete scelto, per esempio se si ha scelto cpunel itemcampo e mettere 2in valuepoi nel caso della domain(si gruppo di VirtualBox) è prendere più 2delle volte CPU sarà terminato.

Puoi ulimitanche usarlo , ma è limitato solo alla shell bash.

Spero che questo ti aiuti nel tuo obiettivo, anche se non è fatto con il metodo che hai chiesto.


1

Immagino che ci sia qualcosa di sbagliato nel tuo /etc/cgconfig.conffile. Questa configurazione funziona per me:

[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

Tuttavia, anziché utilizzare i comandi cgreatee cgset, ti consiglio di creare un /etc/cgconfig.conffile che includa queste impostazioni in modo da non dover ripetere il processo dopo ogni riavvio. Nel tuo caso, il file sarebbe simile al seguente:

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

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

Ora, ogni volta che cgconfigavvierai il servizio, avrai pronto il tuo cgroup vbox. Tutto ciò che serve è spostare il PID della virtualbox nel /cgroups/memory/vbox/tasksfile usando uno cgclassifyo semplicemente echoil numero in quel file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.