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 페이지 를 참고합니다. Gitaly 실행 환경별 지원 범위는 다음과 같습니다. 가상 머신에서는 cgroups v1과 v2를 모두 지원합니다. Gitaly는 마운트 지점을 기준으로 사용할 cgroup 버전을 자동으로 감지합니다. Kubernetes 클러스터에서는 cgroups v2만 지원합니다. cgroups v1에서는 cgroup 계층에 대한 읽기·쓰기 권한을 컨테이너에 위임할 수 없기 때문입니다. Gitaly를 cgroups v2로 실행하면 clone 시스템 호출로 cgroup 아래에서 프로세스를 직접 시작하는 기능 등 추가 기능과 개선 사항을 사용할 수 있습니다. 시작하기 전에 # 환경에 제한을 적용하는 작업은 예기치 않은 트래픽에 대비하는 경우처럼 선별된 상황에서만 신중하게 수행해야 합니다. 제한에 도달하면 연결이 끊어져 사용자 경험에 부정적인 영향을 줍니다. 일관되고 안정적인 성능을 위해서는 노드 사양 조정, 대용량 리포지터리 또는 워크로드 점검 같은 다른 방안을 먼저 검토해야 합니다. 메모리에 대해 cgroups를 활성화할 때는 Gitaly 노드에 스왑이 구성되어 있지 않은지 확인해야 합니다. 프로세스가 종료되는 대신 스왑을 사용하도록 전환될 수 있기 때문입니다. 커널은 사용 가능한 스왑 메모리를 cgroup이 정한 제한에 더해지는 추가 자원으로 간주합니다. 이 경우 성능이 크게 저하될 수 있습니다. Gitaly에서 cgroups를 활성화하려면 repositories 필드의 count 를 0 보다 크게 구성해야 합니다. Gitaly가 cgroups에서 얻는 이점 # 일부 Git operation은 다음과 같은 상황에서 리소스를 고갈시킬 정도로 과도하게 소비할 수 있습니다. 예기치 않게 높은 트래픽. 모범 사례를 따르지 않는 대용량 리포지터리를 대상으로 하는 operation. 이러한 리소스를 소비하는 특정 리포지터리의 활동을 "시끄러운 이웃"이라고 하며, 같은 Gitaly 서버에 호스팅된 다른 리포지터리의 Git 성능을 떨어뜨릴 수 있습니다. 강력한 보호 수단으로 Gital