systemd-run MemoryMax/MemoryLimit이 작동하지 않는 것 같습니다.

systemd-run MemoryMax/MemoryLimit이 작동하지 않는 것 같습니다.

메모리를 차지하도록 systemd를 구성합니다.

$ grep Memory /etc/systemd/system.conf
DefaultMemoryAccounting=yes

100M의 공간을 할당하는 작은 실행 파일을 작성하십시오.

$ cat test.c
#include <stdlib.h>
#include <stdio.h>

int main() {
  void *ptr = malloc(100 * 1024 * 1024); // Allocating 100M
  if (ptr == NULL) {
    printf("ptr NULL\n");
  } else {
    printf("ptr allocated\n");
    free(ptr);
  }
}

그러나 10M 제한으로 실행하는 것은 괜찮아 보입니다.

$ systemd-run --scope -p MemoryMax=10M -p MemorySwapMax=10M -p MemoryLimit=10M --user ./test
Running scope as unit: run-r9e69896461b94a5f8ab68df8e34bee73.scope
ptr allocated

이것이 예상되는 동작입니까? 아니면 구성에서 뭔가를 놓쳤을 수도 있습니다.

답변1

메모리 제한은 할당뿐만 아니라 실제 메모리 사용량에도 적용됩니다. 노력하다

#include <stdlib.h>
#include <stdio.h>

int main() {
  char * ptr = malloc(100 * 1024 * 1024); // Allocating 100M
  if (ptr == NULL) {
    printf("ptr NULL\n");
  } else {
    printf("ptr allocated\n");
    for (int i = 0; i < 100 * 1024 * 1024; i++) ptr[i] = ' ';
    free(ptr);
  }
}

프로그램이 종료되는 것을 볼 수 있습니다.

관련 정보