Gitaly 超时

Gitaly 提供两种类型的可配置超时:

  • 调用超时,通过使用极狐GitLab UI 配置。
  • 谈判(Negotiation)超时,通过使用 Gitaly 配置文件配置。

配置调用超时

配置以下调用超时以确保长时间运行的 Gitaly 调用不会不必要地占用资源。要配置调用超时:

  1. 在左侧导航栏底部,选择 管理中心
  2. 选择 设置 > 偏好设置
  3. 展开 Gitaly 超时 部分。
  4. 设置每个超时。

可用的超时

以下超时可用。

超时 默认 描述
Default 55 seconds 大多数 Gitaly 调用超时(对于 git fetchpush 操作或 Sidekiq 作业不强制)。例如,检查磁盘上是否存在仓库。确保在 Web 请求中进行的 Gitaly 调用不能超过整个请求超时。 它应该比可以为 Puma 配置的 worker 超时短。如果 Gitaly 调用超时超过 worker 超时,则使用 worker 超时的剩余时间来避免不得不终止 worker。
Fast 10 seconds 请求中使用的快速 Gitaly 操作超时,有时是多次。例如,检查磁盘上是否存在仓库。如果快速操作超过此阈值,则存储分片可能存在问题。快速失败有助于保持极狐GitLab 实例的稳定性。
Medium 30 seconds 应该很快的 Gitaly 操作的超时(可能在请求中),但最好不要在请求中多次使用。例如,加载 blob,应该在 Default 和 Fast 之间设置。

配置 negotiation 超时时间

  • 自极狐GitLab 16.5 引入。

您可能需要增加 negotiation 超时时间:

  • 部分大型仓库。
  • 当并行执行这些命令时。

您可以为以下命令配置 negotiation 超时:

  • git-upload-pack(1),当您执行 git fetch 时,Gitaly 节点会涉及到这一点。
  • git-upload-archive(1),当您执行 git archive --remote 时,Gitaly 节点会涉及到这一点。

要配置这些超时:

::Tabs

:::TabTitle Linux package (Omnibus)

编辑 /etc/gitlab/gitlab.rb:

gitaly['configuration'] = {
    timeout: {
        upload_pack_negotiation: '10m',      # 10 minutes
        upload_archive_negotiation: '20m',   # 20 minutes
    }
}

:::TabTitle Self-compiled (source)

编辑 /home/git/gitaly/config.toml:

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

::EndTabs

对于值来说,请使用 Go 中的 ParseDuration 格式。

这些超时仅影响远程 Git 操作的 negotiation phase,而不是整个传输。