使用“systemd-run”限制程序的内存使用

使用“systemd-run”限制程序的内存使用

我使用的是 Debian Bullseye(因此是cgroupsv2,据我所知),我正在尝试使用它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

我需要添加参数MemorySwapMax来为交换使用提供零限制,否则程序将使用交换空间来克服该MemoryMax参数。

正确的命令行如下:

$ systemd-run --quiet --user --scope -p MemoryMax=500M -p MemorySwapMax=0 ./test

相关内容