저는 Debian Bullseye(제가 아는 한 v2)를 사용하고 있으며 이를 사용하여 프로세스의 메모리 사용량을 제한하려고 cgroups
합니다 . systemd-run
메모리가 부족하면 프로세스를 종료해야 합니다(일부 벤치마크를 설정 중입니다).
테스트 프로그램은 다음과 같습니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
const size_t size = 1024 * 1024 * 1024;
int *buffer = (int*)malloc(size * sizeof(int));
int v = 0;
for(size_t i = 0; i < size; ++i) {
buffer[i] = v++;
}
printf("Hello\n");
while(1);
return 0;
}
4GB의 메모리를 할당하고 무한 반복합니다. 페이지가 실제로 할당되었는지 확인하기 위해(이것이 중요한지는 모르겠습니다) 프로그램은 할당 후 메모리에 씁니다.
systemd-run
다음과 같이 실행 하려고 합니다 .
$ systemd-run --quiet --user --scope -p MemoryMax=500M ./test
그러나 프로그램 인쇄는 Hello
중단되지 않습니다.
내가 뭘 잘못했나요?
답변1
스왑 사용에 대해 0 제한을 제공하기 위해 매개변수를 추가해야 합니다 MemorySwapMax
. 그렇지 않으면 프로그램은 이 MemoryMax
매개변수를 극복하기 위해 스왑 공간을 사용합니다.
올바른 명령줄은 다음과 같습니다.
$ systemd-run --quiet --user --scope -p MemoryMax=500M -p MemorySwapMax=0 ./test