cgroup을 사용하여 virtualbox 메모리 사용량 제한

cgroup을 사용하여 virtualbox 메모리 사용량 제한

(컨트롤 그룹)을 사용하여 virtualbox의 메모리 사용량을 제한하려고 하는데 cgroup작동하지 않는 것 같습니다.

내 컴퓨터는 다음과 같습니다

$ 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

나는 다음과 같이 작동하도록 노력하고 있습니다 :

  1. 메모리 계층 아래에 ​​새 cgroup을 생성합니다:

    $ cgcreate -g memory:vbox
    
  2. vbox에 대해 memory.limit_in_bytes를 설정하십시오.

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. pid를 실행하는 vbox를 vbox로 그룹화합니다.

    $ cgclassify -g memory:vbox 20015
    

누군가 이것이 작동하지 않는 이유를 설명할 수 있습니까?

답변1

다음과 같이 파일에 /etc/security/limits.conf를 사용하여 메모리 사용량을 제한할 수 있습니다.

domain type item value

는 어떤 상황에서도 초과할 수 없는 한도 domain입니다 .@groupnametypehardsofthard

item프로젝트 필드는 제한된 프로젝트 유형을 지정합니다. 예를 들면 core(코어 파일의 크기), data(프로그램 데이터 영역의 크기), fsize(사용자가 생성한 파일의 크기), nofile(열린 데이터 파일의 수), rss(상주 세트 크기), stack( stack size), cpu(단일 프로세스의 CPU 시간(분)), nproc(동시 프로세스 수), maxlogins(동시 로그인 수) 및 Priority(프로세스 우선 순위). 데이터, RSS 및 스택 항목은 모두 프로그램에서 소비하는 메모리와 관련이 있습니다. 이러한 데이터 용량과 기타 데이터 용량 측정 단위는 킬로바이트입니다.

선택한 필드 value와 관련하여 item, 예를 들어 cpu필드를 item선택하고 입력 2하면 (VirtualBox 그룹) CPU 시간보다 더 많은 시간이 소요될 value경우 종료됩니다.domain2

그것도 사용할 수 있지만 ulimitbash 쉘로 제한됩니다.

요청한 대로 완료되지는 않았지만 이것이 귀하의 목표 달성에 도움이 되기를 바랍니다.

답변2

파일에 문제가 있는 것 같아요 /etc/cgconfig.conf. 이 설정은 나에게 적합합니다.

[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

그러나 cgreate및 명령을 사용하는 대신 이러한 설정이 포함된 파일을 생성하여 재부팅할 때마다 프로세스를 반복할 필요가 없도록 하는 것이 좋습니다. 귀하의 경우 파일은 다음과 같습니다.cgset/etc/cgconfig.conf

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

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

이제 서비스가 시작될 때마다 vbox cgroup이 준비됩니다. 파일의 숫자를 사용하거나 사용하여 cgconfigvirtualbox의 PID를 파일로 이동하십시오 ./cgroups/memory/vbox/taskscgclassifyecho

관련 정보