cgexec가 하위 프로세스를 올바른 cgroup에 넣지 않습니다.

cgexec가 하위 프로세스를 올바른 cgroup에 넣지 않습니다.

두 개의 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.

관련 정보