메모리를 차지하도록 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);
}
}
프로그램이 종료되는 것을 볼 수 있습니다.