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