cgroup을 사용하여 사용자 램을 제한하는 것이 작동하지 않습니다.

cgroup을 사용하여 사용자 램을 제한하는 것이 작동하지 않습니다.

일부 튜토리얼/리뷰/Google에서 찾을 수 있는 모든 것을 통해 cgroup 실행을 관리할 수 없었기 때문에 가입했습니다. 특정 사용자가 사용할 수 있는 메모리 양을 제한하고 싶습니다. 인터넷에는 "cgroups"라고 나와 있습니다. 내 테스트 서버는 Ubuntu 14.04를 실행하고 있습니다. 언급된 튜토리얼을 두 가지 범주로 나눌 수 있습니다. 제한을 직접 설정하고 특정 구성을 사용하려면 echo를 사용하세요. 둘 다 나에게 적합하지 않습니다.

에코를 사용하여 제한 설정

cgcreate -g cpu,cpuacct,...:/my_group

종료되면 아무런 공지가 없습니다. 내가 달리려고 할 때

echo 100M > memory.limit_in_bytes

sudo를 사용해도 "허용되지 않음"이라고만 나옵니다. 어떤 식으로든 다른 사용자를 제한하는 지점까지는 도달하지 못했습니다.

구성을 사용하여 제한 설정

두 개의 구성 파일을 읽었습니다. 이것은 내 구성 파일입니다.

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

내가 달릴 때

cgconfigparser -l /etc/cgconfig.conf

systemd에 설치됩니다. 이제 testuser로 로그인하여 메모리 집약적인 작업을 실행하고 있습니다. 이 작업은 내 한계에 상관 없이 실행됩니다.

다시 시작해도 아무 변화가 없었습니다. 커널 구성에 대한 이상한 시도조차 작동하지 않았습니다. 저는 cgroups를 처음 접했고 이것이 그렇게 복잡할 것이라고는 예상하지 못했습니다. 내 주제에 대한 제안을 주시면 감사하겠습니다. 미리 감사드립니다!

답변1

이 동작이 나타나는 이유는 로그인 세션에 이미 연관된 메모리 제한 그룹이 있고 시스템 구성에 따라 프로세스가 해당 메모리 제한 그룹을 상속하기 때문일 수 있습니다.

다음 명령을 사용하여 실행 중인 프로세스 cgroup을 확인합니다.

cat /proc/pid/cgroup

...다음과 같은 내용이 표시될 수 있습니다.

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

이 동작을 원하지 않는다고 가정하면 메모리 컨트롤러 편집 /etc/systemd/logind.confmemory행 삭제를 위해 사용자 정의 cgroup을 사용할 수 있습니다 Controllers.

답변2

비슷한 문제가 있었습니다(그러나 Fedora 29에서는): 제 질문이 /etc/cgconfig.conf완전히 무시된 것 같았습니다. 달리기

sudo systemctl enable cgconfig

다시 시작하면 문제가 해결되었습니다.

관련 정보