cgroup
virtualbox의 메모리 사용을 제한 하기 위해 (제어 그룹) 을 사용하려고 하는데 작동하지 않는 것 같습니다.
내 기계는 :
$ 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
나는 이것을 다음과 같이 작동 시키려고 노력했다.
-
메모리 계층에서 새 cgroup 생성 :
$ cgcreate -g memory:vbox
-
vbox에 대한 memory.limit_in_bytes 설정 :
$ cgset -r memory.limit_in_bytes=512M vbox
-
pid를 실행하는 vbox를 vbox로 그룹화 :
$ cgclassify -g memory:vbox 20015
왜 이것이 작동하지 않는지 설명 할 수 있습니까?
답변
이 파일에서 /etc/security/limits.conf를 사용하여 메모리 사용량을 줄일 수 있습니다.
domain type item value
(가) 여기서 domain
는 IS @groupname
, type
인 hard
또는 soft
여기서 hard
그 어떤 상황에서도 초과되지 않을 수 LIMT이다.
item
항목 필드는 제한되는 항목 유형을 지정합니다. 예를 들어 코어 (코어 파일 크기), 데이터 (프로그램 데이터 영역 크기), fsize (사용자가 만든 파일 크기), nofile (열린 데이터 파일 수), rss (상주 세트) 크기), 스택 (스택 크기), CPU (단일 프로세스의 CPU 시간 (분)), nproc (동시 프로세스 수), maxlogins (동시 로그인 수) 및 우선 순위 (프로세스 우선 순위). 데이터, RSS 및 스택 항목은 모두 프로그램에서 사용하는 메모리와 관련이 있습니다. 이들 및 기타 데이터 용량 측정치는 킬로바이트 단위로 측정됩니다.
그리고 value
받는 사람과 관련되어 item
당신이 선택한 경우, 예를 들어, 선택 가지고 필드 cpu
에 item
필드 넣어 2
에서 value
다음 경우에 domain
(버추얼의 그룹화하는) 이상의 가지고있다 2
가 종료됩니다 CPU 시간.
당신도 사용할 수 ulimit
있지만 bash 쉘로만 제한됩니다.
요청한 방법으로 수행되지는 않지만 이것이 목표 달성에 도움이되기를 바랍니다.
답변
/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";
}
}
이제 cgconfig
서비스 를 시작할 때마다 vbox cgroup이 준비됩니다. 필요한 것은 그 파일의 숫자 /cgroups/memory/vbox/tasks
중 하나 cgclassify
또는 단순히 echo
숫자를 사용하여 virtualbox의 PID를 파일 로 옮기는 것 입니다.