Use cgroup para limitar el uso de memoria de virtualbox

9

Estoy tratando de usar cgroup(Grupo de control) para limitar el uso de memoria de virtualbox, pero parece que no funciona.

Mi maquina es:

$ 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

Intenté que funcionara así:

  1. Crear nuevos cgroups bajo jerarquía de memoria:

    $ cgcreate -g memory:vbox
    
  2. Configuración de memory.limit_in_bytes para vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Agrupando vbox ejecutando pid a vbox:

    $ cgclassify -g memory:vbox 20015
    

¿Alguien puede explicar por qué esto no funciona?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

3

puede limitar el uso de memoria con /etc/security/limits.conf en este archivo que ponga:

domain type item value

donde el domaines el @groupname, typees hardo softdonde hardes el límite que no puede ser excedido bajo ninguna circunstancia.

itemes el campo del artículo especifica qué tipo de artículo está siendo limitado Los ejemplos incluyen core (el tamaño de los archivos core), datos (el tamaño del área de datos de un programa), fsize (el tamaño de los archivos creados por el usuario), nofile (el número de archivos de datos abiertos), rss (el conjunto residente tamaño), stack (el tamaño de stack), cpu (el tiempo de CPU de un solo proceso en minutos), nproc (el número de procesos concurrentes), maxlogins (el número de inicios de sesión simultáneos) y prioridad (la prioridad del proceso). Los datos, rss y elementos de la pila están relacionados con la memoria consumida por un programa. Estas y otras medidas de capacidad de datos se miden en kilobytes.

y valueestá relacionado con el itemcampo que ha elegido, por ejemplo, si ha elegido cpuen el itemcampo y puesto 2en el mismo valueen caso de que domain(su grupo de VirtualBox) tome más 2tiempo del tiempo de CPU que terminará.

También puedes usarlo ulimit, pero está restringido solo al bash shell.

Espero que esto te ayude en tu objetivo, aunque no se hace con el método que pediste.

Hanan N.
fuente
1

Supongo que hay algo mal con su /etc/cgconfig.confarchivo. Esta configuración funciona para mí:

[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

Sin embargo, en lugar de utilizar los comandos cgreatey cgset, le aconsejo que cree un /etc/cgconfig.confarchivo que incluya esta configuración para que no tenga que repetir el proceso después de cada reinicio. En su caso, el archivo se vería así:

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

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

Ahora, cada vez que inicie el cgconfigservicio, tendrá listo su vbox cgroup. Todo lo que se necesita es mover el PID de virtualbox al /cgroups/memory/vbox/tasksarchivo usando uno cgclassifyo simplemente echoel número en ese archivo.

mart1n
fuente