Verwenden Sie cgroup, um die Speichernutzung von virtualbox zu begrenzen

9

Ich versuche, cgroup(Kontrollgruppe) zu verwenden, um die Speichernutzung von virtualbox zu begrenzen, aber es scheint nicht zu funktionieren.

Meine Maschine ist:

$ 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

Ich habe versucht, es so zum Laufen zu bringen:

  1. Erstellen neuer Gruppen unter Speicherhierarchie:

    $ cgcreate -g memory:vbox
    
  2. Festlegen von memory.limit_in_bytes für vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Gruppieren von vbox mit pid zu vbox:

    $ cgclassify -g memory:vbox 20015
    

Kann jemand erklären, warum das nicht funktioniert?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

3

Sie könnten die Speichernutzung mit /etc/security/limits.conf in dieser Datei begrenzen, die Sie einfügen:

domain type item value

wo das domainist @groupname, typeist hardoder softwo hardist limt, das unter keinen Umständen überschritten werden kann.

itemist das Elementfeld, das angibt, welcher Elementtyp eingeschränkt wird. Beispiele hierfür sind Core (die Größe der Core-Dateien), Data (die Größe des Datenbereichs eines Programms), Fsize (die Größe der vom Benutzer erstellten Dateien), Nofile (die Anzahl der geöffneten Datendateien), RSS (die residente Gruppe) Größe), Stapel (Stapelgröße), CPU (CPU-Zeit eines einzelnen Prozesses in Minuten), nproc (Anzahl der gleichzeitigen Prozesse), maxlogins (Anzahl der gleichzeitigen Anmeldungen) und Priorität (Prozesspriorität). Die Daten-, RSS- und Stapelelemente beziehen sich alle auf den von einem Programm belegten Speicher. Diese und andere Maße der Datenkapazität werden in Kilobyte gemessen.

und valuebezieht sich auf das itemFeld, das Sie ausgewählt haben, zum Beispiel, wenn Sie cpuin das itemFeld gewählt und 2das valuedann domaineingegeben haben, falls die (Ihre Gruppe von VirtualBox) länger 2dauert als die CPU-Zeit, die sie beendet wird.

Sie können es auch verwenden ulimit, es ist jedoch nur auf die Bash-Shell beschränkt.

Hoffe, dies hilft dir bei deinem Ziel, obwohl es nicht mit der Methode gemacht wird, die du gefragt hast.

Hanan N.
quelle
1

Ich vermute, mit Ihrer /etc/cgconfig.confDatei stimmt etwas nicht . Dieses Setup funktioniert für mich:

[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

Anstatt die Befehle cgreateund zu verwenden cgset, würde ich Ihnen raten, nur eine /etc/cgconfig.confDatei zu erstellen , die diese Einstellungen enthält, damit Sie den Vorgang nicht nach jedem Neustart wiederholen müssen. In Ihrem Fall würde die Datei folgendermaßen aussehen:

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

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

Jetzt haben Sie jedes Mal, wenn Sie den cgconfigDienst starten , Ihre vbox cgroup bereit. Sie müssen lediglich die PID der Virtualbox in die /cgroups/memory/vbox/tasksDatei verschieben, indem Sie entweder cgclassifyoder nur echodie Nummer in dieser Datei verwenden.

mart1n
quelle