setrlimit
syscall이 이미 존재하는데 cgroup을 생성하는 이유는 무엇입니까 getrlimit
?
나는 이것이 rlimit
단일 프로세스에서만 작동할 것이라고 생각했지만 매뉴얼 페이지에는 다음과 같이 명시되어 있습니다.
현재 프로세스와 프로세스가 생성하는 각 프로세스의 시스템 자원 소비 제한은 getrlimit() 호출을 통해 얻을 수 있으며 setrlimit() 호출을 통해 설정할 수 있습니다.
프로세스 그룹의 리소스 사용량을 제어하려면 상위 프로세스(아마도 셸)에서 제한을 설정하면 이러한 제한이 모든 하위 프로세스에 적용되는 것 같습니다.
분명히 두 메커니즘 사이의 몇 가지 주요 차이점이 누락된 것 같지만 원하는 답변을 찾을 수 없습니다.
답변1
이 특정 표현은 *BSD 버전에서 주로 사용되는 것 같습니다 setrlimit
.
다른 버전setrlimit (2)
상태
노트
fork(2)를 통해 생성된 하위 프로세스는 상위 프로세스의 리소스 제한을 상속합니다. execve(2) 전체에 걸쳐 리소스 제한을 예약합니다.
리소스 제한은각 프로세스의 속성프로세스의 모든 스레드에서 공유됩니다.
이는 2GiB 주 메모리 제한이 단일 프로세스(및 해당 스레드)에 적용된다는 점을 더 명확하게 해준다고 생각합니다. 그리고 이 프로세스의 하위 프로세스도 2GiB 기본 메모리 제한을 상속하지만 자체 용도로는 2GiB입니다.
즉, 각 프로세스의 메모리 제한은 2GiB이며, 함께 사용하면 최대 4GiB의 기본 메모리를 사용할 수 있습니다.
반면에 맨페이지는cgroups - Linux 제어 그룹설명하다
CPU 시간 제한과 같은 작업을 수행할 수 있는 다양한 하위 시스템이 구현되었습니다.cgroup에 사용 가능한 메모리, cgroup에서 사용하는 CPU 시간을 계산하고 cgroup의 프로세스 실행을 중지하고 다시 시작합니다.
따라서 제어 그룹을 사용하면 프로세스 그룹의 리소스를 제한할 수 있습니다.
3개 프로세스 그룹의 경우 주 메모리를 2GiB로 제한하면 3개 프로세스 모두 함께 2GiB 이상의 주 메모리를 사용할 수 없습니다.