Gitaly 타임아웃

Tier: Free, Premium, Ultimate

Offering: Self-managed

Gitaly는 두 가지 유형의 구성 가능한 타임아웃을 제공합니다:

  • GitLab UI를 사용하여 구성된 호출 타임아웃.
  • Gitaly 구성 파일을 사용하여 구성된 협상 타임아웃.

호출 타임아웃 구성

장시간 실행되는 Gitaly 호출이 불필요하게 리소스를 차지하지 않도록 다음 호출 타임아웃을 구성하세요. 호출 타임아웃을 구성하려면:

  1. 왼쪽 사이드바 하단에서 Admin을 선택합니다.
  2. Settings > Preferences를 선택합니다.
  3. Gitaly timeouts 섹션을 확장합니다.
  4. 필요에 따라 각 타임아웃을 설정합니다.

사용 가능한 호출 타임아웃

다양한 Gitaly 작업에 대해 서로 다른 호출 타임아웃이 제공됩니다.

Timeout Default Description
Default 55 seconds 대부분의 Gitaly 호출에 대한 타임아웃 ( git fetchpush 작업이나 Sidekiq 작업에는 적용되지 않음). 예를 들어, 디스크에 저장소가 존재하는지 확인하는 경우. 웹 요청에서 Gitaly 호출이 전체 요청 타임아웃을 초과할 수 없도록 확인합니다. Puma에 대해 구성할 수 있는 worker timeout보다 짧아야 합니다. Gitaly 호출 타임아웃이 worker timeout을 초과하면 worker를 종료할 필요가 없도록 이미 남아 있는 worker timeout 시간이 사용됩니다.
Fast 10 seconds 요청에서 종종 여러 번 사용되는 빠른 Gitaly 작업에 대한 타임아웃. 예를 들어, 디스크에 저장소가 존재하는지 확인하는 경우. 빠른 작업이 이 임계값을 초과하면 스토리지 샤드에 문제가 있을 수 있습니다. 빠르게 실패하면 GitLab 인스턴스의 안정성을 유지하는 데 도움이 될 수 있습니다.
Medium 30 seconds 요청에서 빠르지만 선호적으로 여러 번 사용되지 않아야 하는 Gitaly 작업에 대한 타임아웃. 예를 들어, blobs를 로드하는 경우. Default와 Fast 사이에 설정해야 할 타임아웃입니다.

협상 타임아웃 구성

특히 큰 저장소의 경우 협상 타임아웃을 늘려야 할 수 있습니다.

  • 이러한 명령을 병렬로 수행할 때.

다음에 대한 협상 타임아웃을 구성할 수 있습니다:

  • git-upload-pack(1), Gitaly 노드에 의해 git fetch를 실행할 때 호출됩니다.
  • git-upload-archive(1), Gitaly 노드에 의해 git archive --remote를 실행할 때 호출됩니다.

이러한 타임아웃을 구성하려면:

Linux 패키지 (Omnibus)

/etc/gitlab/gitlab.rb를 편집합니다:

gitaly['configuration'] = {
    timeout: {
        upload_pack_negotiation: '10m',      # 10 분
        upload_archive_negotiation: '20m',   # 20 분
    }
}
소스에서 컴파일된 (Self-compiled)

/home/git/gitaly/config.toml을 편집합니다:

[timeout]
upload_pack_negotiation = "10m"
upload_archive_negotiation = "20m"

값의 경우 Go에서 ParseDuration 형식을 사용하세요.

이 타임아웃은 원격 Git 작업의 협상 단계에만 영향을 미치며 전체 전송에는 영향을 미치지 않습니다.