「systemd-run」を使用したプログラムのメモリ使用量の制限

「systemd-run」を使用したプログラムのメモリ使用量の制限

私はDebian Bullseye(私が知っている限りv2)を使用しており、それを使用してプロセスのメモリ使用量を制限したいと思いますcgroupssystemd-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

おすすめ記事