"systemd-run"을 사용하여 프로그램의 메모리 사용량 제한

"systemd-run"을 사용하여 프로그램의 메모리 사용량 제한

저는 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

관련 정보