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);
  }
}

你会看到程序被杀死。

相关内容