우리는 cgroups
프로세스의 CPU 사용량을 제한하는 것이 가능하다는 것을 알고 있습니다. 예는 다음과 같습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30142 root 20 0 104m 2520 1024 R 99.7 0.1 14:38.97 sh
pid가 30142인 프로세스가 있습니다. 다음과 같이 제한할 수 있습니다.
mkdir -p /sys/fs/cgroup/memory/foo
echo 1048576 > /cgroup/memory/foo/memory.limit_in_bytes
echo 30142 > /cgroup/memory/foo/tasks
보시다시피, 프로세스를 제한하려면 먼저 이를 수행한 다음 해당 pid를 기반으로 제한할 수 있습니다. 이름을 기준으로 프로세스를 제한하는 것이 가능합니까? 프로세스를 실행하기 전에 프로세스를 제한할 수 있습니까?
답변1
제어 그룹은 pid를 기반으로 하며 이름으로 프로세스를 제한할 수 있는 직접적인 방법은 없습니다. (제어 그룹은 계층적이기 때문에 이는 의미가 있습니다. 기본적으로 그룹에는 해당 멤버 프로세스의 미래 자식도 포함되어 있으며 이름으로 다른 그룹에 다시 연결되는 것은 놀라운 일입니다.)
제어 그룹을 사용하는 일반적인 방법은 상위 프로세스를 제어 그룹에 연결한 다음 하위 프로세스가 상위 프로세스 그룹을 상속한다는 사실에 의존하는 것입니다. 그러나 특정 그룹에서 프로세스를 시작할 수 있는 도구가 있습니다 cgexec
.
cgexec -g memory:foo yourcommand
데비안에서는 이것을 찾을 수 있습니다cgroup-tools
.