cgroupを使用した子プロセスのない単一プロセスのメモリ制限

cgroupを使用した子プロセスのない単一プロセスのメモリ制限

プロセスのメモリ使用量を制限し、すべての子プロセスを無視する必要があります。どうすればいいですか? cgroupを使用することをお勧めしますが、必須ではありません。

注:現在の内容をすべて無視したいと思います。未来プロセスの子プロセスです。限界から抜け出すことができることを知っていますが、それが私にとって必要なものです。

答え1

私の場合はprlimit --as=<virtual memory in bytes>役に立ちました。 (仮想メモリはトリッキーなため) 必ずしも正しく動作するわけではありませんので注意して使用してください。ソフト制限を設定することもできます。prlimit --as=<limit>:

例:

2 GBの仮想メモリ制限(ソフトおよびハード制限)でプロセスを開始します。

prlimit --as=2147483648 -- process --with args

2GBの仮想メモリ制限でプロセスを開始する(ソフト制限のみ)

prlimit --as=2147483648: -- process --with args

2 GBの仮想メモリ制限でプロセスを開始する(ハード制限のみ)

prlimit --as=:2147483648 -- process --with args

既存のプロセスを2GBの仮想メモリに制限

prlimit --as=2147483648 --pid=<process pid>

現在のシェルの仮想メモリを2GBに制限します。

prlimit --as=2147483648 --pid=$$

関連情報