Utilisez cgroup pour limiter l'utilisation de la mémoire de virtualbox

9

J'essaie d'utiliser cgroup(Control Group) pour limiter l'utilisation de la mémoire de virtualbox, mais cela ne semble pas fonctionner.

Ma machine est:

$ 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

J'ai essayé de le faire fonctionner comme ceci:

  1. Création de nouveaux groupes de contrôle sous hiérarchie de mémoire:

    $ cgcreate -g memory:vbox
    
  2. Définition de memory.limit_in_bytes pour vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Groupement de vbox exécutant pid à vbox:

    $ cgclassify -g memory:vbox 20015
    

Quelqu'un peut-il expliquer pourquoi cela ne fonctionne pas?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

3

vous pouvez limiter l'utilisation de la mémoire avec /etc/security/limits.conf dans ce fichier que vous mettez:

domain type item value

domainest le @groupname, typeest hardou softhardest limt qui ne peut en aucun cas être dépassé.

itemest le champ d'élément spécifie quel type d'élément est limité. Les exemples incluent core (la taille des fichiers core), data (la taille de la zone de données d'un programme), fsize (la taille des fichiers créés par l'utilisateur), nofile (le nombre de fichiers de données ouverts), rss (l'ensemble résident size), stack (la taille de la pile), cpu (le temps CPU d'un seul processus en minutes), nproc (le nombre de processus simultanés), maxlogins (le nombre de connexions simultanées) et la priorité (la priorité du processus). Les données, rss et éléments de pile sont tous liés à la mémoire consommée par un programme. Ces mesures et d'autres de la capacité des données sont mesurées en kilo-octets.

et valueest lié au itemchamp que vous avez choisi, par exemple si vous avez choisi cpudans le itemchamp et inséré 2dans le valuecas où le domain(vous groupe de VirtualBox) prend plus de temps que 2le CPU il sera terminé.

Vous pouvez ulimitégalement l' utiliser , mais il est limité au shell bash uniquement.

J'espère que cela vous aidera dans votre objectif, bien que cela ne se fasse pas avec la méthode que vous avez demandée.

Hanan N.
la source
1

Je suppose qu'il y a un problème avec votre /etc/cgconfig.conffichier. Cette configuration fonctionne pour moi:

[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

Cependant, plutôt que d'utiliser les commandes cgreateet cgset, je vous conseille simplement de créer un /etc/cgconfig.conffichier qui inclurait ces paramètres afin que vous n'ayez pas à répéter le processus après chaque redémarrage. Dans votre cas, le fichier ressemblerait à ceci:

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

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

Maintenant, chaque fois que vous démarrez le cgconfigservice, votre groupe de contrôle vbox est prêt. Tout ce qui est nécessaire est de déplacer le PID de la virtualbox dans le /cgroups/memory/vbox/tasksfichier en utilisant soit cgclassifyou simplement echole numéro de ce fichier.

mart1n
la source