Help us learn about your current experience with the documentation. Take the survey.

Gitaly 超时

  • 版本:Free, Premium, Ultimate
  • 产品:GitLab Self-Managed

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

  • 调用超时 (Call timeouts),通过 GitLab 用户界面 (UI) 进行配置。
  • 协商超时 (Negotiation timeouts),通过 Gitaly 配置文件进行配置。

配置调用超时

配置以下调用超时,以确保长时间运行的 Gitaly 调用不会无谓地占用资源。配置步骤如下:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 偏好设置
  3. 展开 Gitaly 超时 部分。
  4. 根据需要设置每个超时值。

可用的调用超时

不同的 Gitaly 操作对应不同的调用超时。

超时类型 默认值 描述
默认 55 秒 适用于大多数 Gitaly 调用的超时(不对 git fetchpush 操作,或 Sidekiq 任务强制执行)。例如,检查仓库是否存在于磁盘上。确保在 Web 请求中进行的 Gitaly 调用不会超过整个请求的超时时间。它应该短于可为 Puma 配置的 worker timeout。如果 Gitaly 调用超时超过了 worker 超时,则会使用 worker 超时的剩余时间,以避免终止 worker。
快速 10 秒 用于请求中快速 Gitaly 操作的超时,有时一个请求中会多次使用。例如,检查仓库是否存在于磁盘上。如果快速操作超过此阈值,则存储分片可能存在问题。快速失败有助于维护 GitLab 实例的稳定性。
中等 30 秒 适用于本应快速(可能在请求中)但最好不在一个请求中多次使用的 Gitaly 操作的超时。例如,加载 Blob。超时值应设置在“默认”和“快速”之间。

配置协商超时

在以下情况下,您可能需要增加协商超时:

  • 对于特别大的仓库。
  • 当并行执行这些命令时。

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

  • git-upload-pack(1),当您执行 git fetch 时由 Gitaly 节点调用。
  • git-upload-archive(1),当您执行 git archive --remote 时由 Gitaly 节点调用。

要配置这些超时:

编辑 /etc/gitlab/gitlab.rb

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

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

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

对于超时值,请使用 Go 语言中的 ParseDuration 格式。

这些超时仅影响远程 Git 操作的协商阶段,而不影响整个传输过程。