InfoGrab Docs

Cgroups

Gitaly에서 cgroups를 사용하여 메모리와 CPU 소비를 제한하는 방법을 설명합니다.

Linux의 컨트롤 그룹(cgroups)을 사용하여 특정 프로세스가 소비할 수 있는 메모리와 CPU 양에 제한을 가할 수 있습니다. Cgroups는 메모리와 CPU 과소비로 인한 예기치 않은 리소스 고갈로부터 시스템을 보호하는 데 도움이 됩니다. Cgroups는 널리 사용 가능하며 컨테이너화를 위한 기본 메커니즘으로 일반적으로 활용됩니다. Cgroups는 일반적으로 /sys/fs/cgroup 에 마운트되는 가상 파일 시스템을 사용하여 구성되며, 계층적 방식으로 리소스를 할당합니다. 마운트 포인트는 Gitaly에서 구성할 수 있습니다. 구조는 사용 중인 cgroups 버전에 따라 달라집니다: Cgroups v1은 리소스 중심 계층 구조를 따릅니다. 상위 디렉토리는 cpu 및 memory 와 같은 리소스입니다. Cgroups v2는 프로세스 중심 방식을 채택합니다. 상위 디렉토리는 프로세스 그룹이며, 그 안의 파일들은 제어되는 각 리소스를 나타냅니다. 더 심층적인 소개는 cgroups Linux man page 를 참조하세요. Gitaly가 실행되는 경우: 가상 머신에서는 cgroups v1과 cgroups v2 모두 지원됩니다. Gitaly는 마운트 포인트를 기반으로 사용할 cgroup 버전을 자동으로 감지합니다. Kubernetes 클러스터에서는 cgroups v1을 사용하여 컨테이너에 cgroup 계층 구조에 대한 읽기/쓰기 권한을 위임할 수 없기 때문에 cgroups v2만 지원됩니다. cgroups v2로 Gitaly를 실행할 때 cgroup 아래에서 프로세스를 직접 시작하기 위해 clone 시스템 호출을 사용하는 기능 등 추가 기능 및 개선 사항을 사용할 수 있습니다. 시작하기 전에 # 환경에 대한 제한 활성화는 예상치 못한 트래픽으로부터 보호하는 등 특정 상황에서만 주의하여 수행해야 합니다. 제한에 도달하면 사용자에게 부정적인 영향을 미치는 연결 끊김이 발생합니다. 일관되고 안정적인 성능을 위해 먼저 노드 사양 조정이나 대형 저장소 검토 또는 워크로드와 같은 다른 옵션을 탐색해야 합니다. 메모리에 대한 cgroups를 활성화할 때는 Gitaly 노드에 스왑이 구성되어 있지 않은지 확인해야 합니다. 프로세스가 종료되는 대신 스왑을 사용하도록 전환할 수 있기 때문입니다. 커널은 사용 가능한 스왑 메모리를 cgroup이 부과한 제한에 추가적인 것으로 간주합니다. 이 상황은 성능을 현저하게 저하시킬 수 있습니다. Gitaly에서 cgroups를 활성화하려면 repositories 필드를 count 가 0 보다 크게 구성해야 합니다. Gitaly가 cgroups에서 얻는 이점 # 일부 Git 작업은 다음과 같은 상황에서 리소스를 과도하게 소비하여 고갈 지점까지 이를 수 있습니다: 예상치 못한 높은 트래픽. 모범 사례를 따르지 않는 대형 저장소에 대한 작업 실행. 이러한 리소스를 소비하는 특정 저장소의 활동은 "시끄러운 이웃(noisy neighbors)"으로 알려져 있으며, Gitaly 서버에 호스팅된 다른 저장소의 Git 성능 저하를