cgexecは子プロセスを正しいcgroupに入れません。

cgexecは子プロセスを正しいcgroupに入れません。

2つのcgroupを作成しました。

sudo cgcreate -g cpu,memory:rustserver
sudo cgset -r memory.max=150000000 rustserver
sudo cgset -r cpu.max=25000 rustserver

sudo cgcreate -g cpu,memory:pyexecutor
sudo cgset -r memory.max=150000000 pyexecutor
sudo cgset -r cpu.max=25000 pyexecutor

これは私の/etc/cgrules.confファイルです:

*:target/debug/python-executor cpu,memory pyexecutor
*:target/debug/rust-api cpu,memory rustserver

次のコマンドを実行します。 sudo cgexec target/debug/rust-api

文書によるcgexex注文する

-g : ジョブが実行される制御グループを定義します。 Controllers はコントローラのリストで、 path は指定されたコントローラのリスト内の制御グループへの相対パスです。このフラグは、複数のコントローラのリストと相対パスを定義するために複数回使用できます。インストールされているすべてのコントローラのリストの代わりにワイルドカード文字b "* b"を使用できます。

このオプションを使用しない場合、cgexec は /etc/cgrules.conf に基づいて正しい cgroup にジョブを自動的に配置します。

--sticky このオプションを指定して作業コマンドを実行すると、cgred (cgrulesengd プロセス) をサービスするデーモンは変更されません。 子供のための命令と使命。このオプションがないと、デーモンはコマンドの操作を変更しませんが、/etc/cgrules.conf に従ってサブタスクを正しい cgroup に自動的に変更します。

target/debug/python-executor実行しているサブプロセスをrust-api独自のcgroupに配置したいです。ただし、子プロセスはcgroupにも表示されますrustserver

私のデフォルトアプリケーション(rust-api)に独自のcgroupを持たせたい。 Rust-apiはpython-executorという名前の複数のプロセスを生成します。これらのサブプロセスはpyexecutorcgroupに表示されます。

実行すると、sudo cgclassify <pid of a python-executor>プロセスは正しいpyexecutorcgroupに配置されます。

答え1

これが私の現在のソリューションです。

watch -n 5 'sudo cgclassify $(pgrep -x python-executor | tr "\n" " ")'

5秒ごとにcgclassifyを実行し、python-executorをetc/cgrules.conf

関連情報