应用限制

与大多数大型应用程序一样,极狐GitLab 会对某些功能实施限制,保持最低的性能质量。允许某些功能不受限制可能会影响安全性、性能、数据,甚至可能耗尽为应用程序分配的资源。

速率限制

速率限制可用于提高极狐GitLab 的安全性和持久性。

阅读更多关于如何配置速率限制

议题创建

引入于 12.10 版本。

此设置限制到议题创建端点的请求速率。

阅读更多关于议题创建的速率限制

  • 默认速率限制:默认禁用。

按用户或 IP 限制

此设置限制每个用户或 IP 的请求速率。

阅读更多关于用户和 IP 的速率限制

  • 默认速率限制:默认禁用。

按原始端点限制

此设置限制每个端点的请求速率。

阅读更多关于原始端点的速率限制

  • 默认速率限制:每个项目、每个提交和每个文件路径 300 个请求。

按受保护路径限制

此设置限制特定路径上的请求速率。

极狐GitLab 速率默认限制以下路径:

'/users/password',
'/users/sign_in',
'/api/#{API::API.version}/session.json',
'/api/#{API::API.version}/session',
'/users',
'/users/confirmation',
'/unsubscribes/',
'/import/github/personal_access_token',
'/admin/session'

阅读更多关于受保护路径速率限制

  • 默认速率限制:10 次请求后,客户端必须等待 60 秒才能重试。

软件包库

引入于 13.12 版本。

此设置限制每个用户或 IP 对 Packages API 的请求速率率。获取更多信息,查看 Package Registry 速率限制

  • 默认速率限制:默认禁用。

Git LFS

引入于 14.3 版本。

此设置限制每个用户的 Git LFS 请求的请求率。

  • 默认速率限制:默认禁用。

Files API

  • 引入于 14.3 版本,功能标志名为 files_api_throttling。默认禁用。
  • 于 14.6 版本通用。功能标志 files_api_throttling 移除。

此设置限制每个用户或 IP 地址对 Packages API 的请求率。获取更多信息,阅读 Files API 速率限制

  • 默认速率限制:默认禁用。

废弃 API 端点

引入于 14.4 版本

此设置限制每个用户或 IP 地址对已弃用 API 端点的请求速率。获取更多信息,阅读 Deprecated API 速率限制

  • 默认速率限制:默认禁用。

导入/导出

引入于 13.2 版本

此设置限制群组和项目的导入/导出操作。

限制 默认值(每分钟每个用户)(per minute per user)
项目导入 6
项目导出 6
项目导出下载 1
群组导入 6
群组导出 6
群组导出下载 1

阅读更多关于导入/导出速率限制

成员邀请

限制每个群组层级允许的最大每日成员邀请。

  • SaaS:免费成员每天可以邀请 20 名成员。
  • 自助管理:邀请不受限制。

Webhook 速率限制

  • 引入于 13.12 版本。
  • 功能标志移除于 14.1 版本。

限制每分钟可以调用任何特定 webhook 的次数。 仅适用于项目和群组 webhook。

超过速率限制的调用会被记录到 auth.log 中。

为自助管理安装实例设置此限制,在 GitLab Rails console

# If limits don't exist for the default plan, you can create one with:
# Plan.default.create_limits!

Plan.default.actual_limits.update!(web_hook_calls: 10)

将限制设置为 0 可以禁用它。

  • 默认速率限制:禁用(无限制)。

搜索速率限制

  • 引入于 14.9 版本

此设置限制全局搜索请求

限制 默认值(每分钟请求数)
经过身份验证的用户 30
未经身份验证的用户 10

Gitaly 并发限制

克隆流量会给您的 Gitaly 服务带来很大压力。为防止此类工作负载使您的 Gitaly 服务器不堪重负,您可以在 Gitaly 的配置文件中设置并发限制。

  • 默认速率限制:禁用。

每个议题、合并请求或提交的评论数

针对议题、合并请求或提交的评论数量是有限制的。当达到限制时,仍然可以添加系统注释,历史事件不会丢失,但用户提交的评论失败。

  • 最大限制:5000 条评论。

议题、合并请求和史诗的评论和描述的大小

对议题、合并请求和史诗的评论和描述的大小是有限制的。 尝试添加大于限制的文本正文会导致错误,并且项目也不会创建。

将来此限制可能会更改为较低的数字。

  • 最大大小: ~100 万字符 / ~1 MB。

提交标题和描述的大小

引入于 13.9 版本

带有任意大消息的提交可能会被推送到极狐GitLab,但在显示提交时,标题(提交消息的第一行)限制为 1KiB,描述(消息的其余部分)限制为 1MiB.

里程碑概述中的议题数量

里程碑概览页面上加载的最大议题数为 500。 当数量超过限制时,页面会显示警报并链接到里程碑中所有议题的分页议题列表

  • 限制:500 个议题。

每次 Git push 的流水线数

当使用单个 Git push 推送多个更改时,例如多个标签或分支,只能触发四个标签或分支流水线。此限制可防止在使用 git push --allgit push --mirror 时意外创建大量流水线。

合并请求流水线不受限制。 如果 Git 推送同时更新多个合并请求,则可以为每个更新的合并请求触发一个合并请求流水线。

要删除限制,使得任何数量的流水线可以触发单个 Git push 事件,管理员可以启用 git_push_create_all_pipelines 功能标志。 不建议启用此功能标志,因为如果一次推送太多更改并意外创建大量流水线,可能会导致极狐GitLab 实例负载过大。

嵌入式指标的数量

出于性能原因,在 GitLab Flavored Markdown (GFM) 中嵌入指标时存在限制。

  • 最大限制:100 个嵌入。

Webhook 限制

查看 Webhook 速率限制

webhooks 数量

要设置自助管理安装实例的群组或项目 webhook 的最大数量,请在 GitLab Rails 控制台 中运行以下命令:

# If limits don't exist for the default plan, you can create one with:
# Plan.default.create_limits!

# For project webhooks
Plan.default.actual_limits.update!(project_hooks: 200)

# For group webhooks
Plan.default.actual_limits.update!(group_hooks: 100)

将限制设置为 0,可以禁用它。

默认的最大 webhook 数量是每个项目 100 个,每个群组 50 个。

Webhook 负载大小

最大 Webhook 有效负载大小为 25 MB。

递归 webhooks

引入于 14.8 版本。

GitLab 检测并阻止递归或超出可从其它 webhook 触发的并超出限制的 webhook。极狐GitLab 能够继续支持使用 webhook 以非递归方式调用 API 或不触发不合理数量的其它 webhook 的工作流。

当 webhook 配置为调用其自己的 GitLab 实例(例如 API)时,可能会发生递归。然后调用会触发相同的 webhook 并无限循环。

触发其它 webhook 的一系列 webhook 向实例发出的最大请求数为 100。当达到限制时,系统会阻止该系列触发任何更多的 webhook。

被阻止的递归 webhook 调用记录在 auth.log 中,并带有消息 "Recursive webhook blocked from executing"

拉取镜像间隔

引入于 13.7 版本。

拉刷新之间的最短等待时间 默认为 300 秒(5 分钟)。例如,无论您触发多少次,在给定的 300 秒周期内,拉取刷新只运行一次。

此设置适用于通过 projects API 调用的拉取刷新的上下文,或通过选择 设置 > 仓库 > 镜像仓库 中的 立即更新 () 按钮进行强制更新时。此设置对 Sidekiq 用于 pull mirroring 的自动 30 分钟间隔计划没有影响。

要更改自助管理安装实例的此限制,请在 GitLab Rails 控制台中运行以下命令:

# If limits don't exist for the default plan, you can create one with:
# Plan.default.create_limits!

Plan.default.actual_limits.update!(pull_mirror_interval_seconds: 200)

来自自动回复的传入电子邮件

极狐GitLab 通过查找 X-Autoreply header 来忽略所有从自动回复器发送的传入电子邮件。此类电子邮件不会对议题或合并请求创建评论。

通过错误跟踪从 Sentry 发送的数据量

出于安全原因和限制内存消耗,发送到极狐GitLab 的 Sentry 有效负载的最大限制为 1 MB。

CI/CD 限制

活跃流水线中的作业数

每个项目可以限制活跃流水线中的作业总数。每次创建新流水线时都会检查此限制。活跃流水线是处于以下状态之一的任何流水线:

  • created
  • pending
  • running

如果新流水线会导致作业总数超过限制,则流水线将失败并出现 job_activity_limit_exceeded 错误。

  • SaaS 订阅者有不同的限制,由订阅方案级别定义,会影响该方案下的所有项目。
  • 专业版或更高级别自助管理实例上,此限制是在影响所有项目的 default 方案下定义的。默认情况下禁用此限制 (0)。

要为自助管理安装实例设置此限制,请在 GitLab Rails 控制台中运行以下命令:

# If limits don't exist for the default plan, you can create one with:
# Plan.default.create_limits!

Plan.default.actual_limits.update!(ci_active_jobs: 500)

将限制设置为 0,可以禁用它。

流水线中的最大部署作业数

Introduced in GitLab 13.7.

您可以限制流水线中的最大部署作业数。部署是指定了 environment 的任何作业。在创建流水线时,检查流水线中的部署数量。部署过多的流水线会失败,并出现 deployments_limit_exceeded 错误。

所有自助管理和 SaaS 方案 的默认限制为 500。

要更改自助管理安装实例的限制,请使用以下 GitLab Rails 控制台 命令更改 default 方案的限制:

# If limits don't exist for the default plan, you can create one with:
# Plan.default.create_limits!

Plan.default.actual_limits.update!(ci_pipeline_deployments: 500)

将限制设置为 0,可以禁用它。

一个项目的 CI/CD 订阅数

每个项目的订阅总数可以受到限制。每次创建新订阅时都会检查此限制。

如果新订阅导致订阅总数超过限制,则认为订阅无效。

  • SaaS 订阅者有不同的限制,由订阅方案级别定义,会影响该方案下的所有项目。
  • 专业版或更高级别自助管理实例上,此限制是在影响所有项目的 default 方案下定义的。 默认情况下,有 2 个订阅的限制。

要更改自助管理安装实例的限制,请使用以下 GitLab Rails 控制台命令:

Plan.default.actual_limits.update!(ci_project_subscriptions: 500)

将限制设置为 0,可以禁用它。

限制流水线触发器的数量

引入于 14.6 版本。

您可以设置每个项目的最大流水线触发器数限制。每次创建新触发器时都会检查此限制。

如果一个新的触发器会导致流水线触发器的总数超过限制,则该触发器被认为是无效的。

将限制设置为 0,可以禁用它。在自助管理实例上默认为 150。

要在自助管理安装实例中将此限制设置为 100,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(pipeline_triggers: 100)

流水线计划数量

每个项目可以限制流水线计划的总数。每次创建新的流水线计划时都会检查此限制。如果新的流水线计划会导致流水线计划的总数超过限制,则不会创建。

SaaS 订阅者有不同的限制,由订阅方案级别定义,会影响该方案下的所有项目。 在专业版或更高级别自助管理实例上,此限制是在影响所有项目的 default 方案下定义的。默认情况下,有 10 个流水线计划的限制。

要更改自助管理安装实例的限制,请使用以下 GitLab Rails 控制台命令:

Plan.default.actual_limits.update!(ci_pipeline_schedules: 100)

限制每天由流水线计划创建的流水线数量

引入于 14.0 版本。

您可以限制流水线计划每天可以触发的流水线数量。

尝试以超过限制的频率运行流水线的计划,将减慢到最大频率。 频率的计算方法是用 1440(一天中的分钟数)除以限制值。例如,对于最大频率:

  • 每分钟一次,限制必须是 1440
  • 每 10 分钟一次,限制必须是 144
  • 每 60 分钟一次,限制必须是 24

默认情况下,自助管理实例没有限制。

要在自助管理安装实例中将此限制设置为 1440,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(ci_daily_pipeline_schedule_triggers: 1440)

实例级变量的数量

引入于 13.1 版本。

实例级别 CI/CD 变量的总数在实例级别受到限制。 每次创建新的实例级变量时都会检查此限制。如果新变量会导致变量总数超过限制,则创建新变量。

在自助管理实例上,此限制是为 default 计划定义的。默认情况下,此限制设置为 25

要在自助管理安装实例中将更新此限制的值,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(ci_instance_level_variables: 30)

每种产物类型的最大文件大小

引入于 13.3 版本。

如果文件大小超过最大文件大小限制,则 runner 上传的使用 artifacts:reports 定义的作业产物将被拒绝。该限制是通过将项目的最大产物大小设置与给定产物类型的实例限制进行比较来确定的,并选择较小的值。

限制以兆字节为单位设置,因此可以定义的最小可能值是 1 MB

每种类型的产物都有一个可以设置的大小限制。默认值为 0 表示该特定产物类型没有限制,并且使用项目的最大产物大小设置:

产物限制名称 默认值
ci_max_artifact_size_accessibility 0
ci_max_artifact_size_api_fuzzing 0
ci_max_artifact_size_archive 0
ci_max_artifact_size_browser_performance 0
ci_max_artifact_size_cluster_applications 0
ci_max_artifact_size_cluster_image_scanning 0
ci_max_artifact_size_cobertura 0
ci_max_artifact_size_codequality 0
ci_max_artifact_size_container_scanning 0
ci_max_artifact_size_coverage_fuzzing 0
ci_max_artifact_size_dast 0
ci_max_artifact_size_dependency_scanning 0
ci_max_artifact_size_dotenv 0
ci_max_artifact_size_junit 0
ci_max_artifact_size_license_management 0
ci_max_artifact_size_license_scanning 0
ci_max_artifact_size_load_performance 0
ci_max_artifact_size_lsif 100 MB
ci_max_artifact_size_metadata 0
ci_max_artifact_size_metrics_referee 0
ci_max_artifact_size_metrics 0
ci_max_artifact_size_network_referee 0
ci_max_artifact_size_performance 0
ci_max_artifact_size_requirements 0
ci_max_artifact_size_sast 0
ci_max_artifact_size_secret_detection 0
ci_max_artifact_size_terraform 5 MB
ci_max_artifact_size_trace 0

例如,要在自助管理安装实例中将 ci_max_artifact_size_junit 限制设置为 10 MB,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(ci_max_artifact_size_junit: 10)

每个 GitLab Pages 网站的文件数

每个 GitLab Pages 网站的文件条目总数(包括目录和软链接)限制为 200000

您可以使用 GitLab Rails 控制台更新自助管理实例中的限制。 例如,要将限制更改为 100

Plan.default.actual_limits.update!(pages_file_entries: 100)

每个范围的注册 runner 数量

注册 runner 的总数在群组和项目级别受到限制。每次注册新 runner 时,系统都会根据过去 3 个月内活跃的 runner 检查这些限制。 如果 runner 注册超过 runner 注册令牌确定的范围限制,则 runner 注册失败。 如果限制值设置为零,则禁用限制。

  • 对于 SaaS 订阅者,每个级别定义了不同的限制,影响使用该级别的所有项目。
  • 自助管理的专业版和旗舰版限制由影响所有项目的默认计划定义:

    Runner 范围 默认值
    ci_registered_group_runners 1000
    ci_registered_project_runners 1000

    要更新这些限制,请在 GitLab Rails 控制台中运行以下命令:

      # Use ci_registered_group_runners or ci_registered_project_runners
      # depending on desired scope
      Plan.default.actual_limits.update!(ci_registered_project_runners: 100)
    

作业日志的最大文件大小

  • 引入于 14.1 版本,默认禁用。
  • 默认启用于 14.2 版本,功能标志 ci_jobs_trace_size_limit 移除。

默认情况下,作业日志文件大小限制为 100 兆字节。任何超过此值的作业都将被丢弃。

您可以在 GitLab Rails 控制台中更改限制。 用新值(以兆字节为单位)更新 ci_jobs_trace_size_limit

Plan.default.actual_limits.update!(ci_jobs_trace_size_limit: 125)

每个项目的最大活跃 DAST 配置文件计划数

引入于 14.3 版本。

限制每个项目的活跃 DAST 配置文件计划的数量。DAST 配置文件计划可以是活跃的或非活跃的。

您可以在 GitLab Rails 控制台中更改限制。 使用新值更新 dast_profile_schedules

Plan.default.actual_limits.update!(dast_profile_schedules: 50)

CI/CD 配置 YAML 文件的最大大小和深度

CI/CD 配置 YAML 文件的默认最大大小为 1 兆字节,默认深度为 100。

您可以在 GitLab Rails 控制台中更改这些限制:

  • 要更新最大 YAML 大小,请使用以 MB 为单位的新值更新 max_yaml_size_bytes

    ApplicationSetting.update!(max_yaml_size_bytes: 2.megabytes)
    

    max_yaml_size_bytes 值不直接与 YAML 文件的大小相关,而是与为相关对象分配的内存相关联。

  • 要更新最大 YAML 深度,请使用以 MB 为单位的新值更新 max_yaml_depth

    ApplicationSetting.update!(max_yaml_depth: 125)
    

要完全禁用此限制,请禁用控制台中的功能标志:

Feature.disable(:ci_yaml_limit_size)

限制 dotenv 变量

引入于 14.5 版本。

您可以对 dotenv 产物内的最大变量数设置限制。 每次将 dotenv 文件导出为产物时,都会检查此限制。

将限制设置为 0,可以禁用它。在自助管理实例上默认为 0

要在自助管理实例上将此限制设置为 100,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(dotenv_variables: 100)

限制 dotenv 文件大小

引入于 14.5 版本。

您可以设置 dotenv 产物的最大大小限制。每次将 dotenv 文件导出为产物时,都会检查此限制。

将限制设置为 0,可以禁用它。默认为 5KB。

要在自助管理安装实例中将此限制设置为 5KB,请在 GitLab Rails 控制台中运行以下命令:

Plan.default.actual_limits.update!(dotenv_size: 5.kilobytes)

实例监控和指标

限制入站事件管理警报

您可以限制在一段时间内可以创建的事件的入站警报数量。入站事件管理警报限制可以通过减少警报数量或重复议题,帮助防止事件响应工具超载。

要设置入站事件管理警报限制:

  1. 在顶部栏上,选择 菜单 > 管理员
  2. 在左侧边栏中,选择 设置 > 网络
  3. 展开通用 事件管理限制
  4. 选中 启用事件管理入站警报限制 复选框。
  5. 可选。为 每个项目每个速率限制期间的最大请求数 输入自定义值。默认值为 3600。
  6. 可选。为 速率限制期 输入自定义值。 默认值为 3600 秒。

Prometheus 警报 JSON 有效负载

发送到 notify.json 端点的 Prometheus 警报有效负载的大小限制为 1 MB。

通用警报 JSON 有效负载

发送到 notify.json 端点的警报有效负载的大小限制为 1 MB。

指标仪表板 YAML 文件

解析后的指标仪表板 YAML 文件占用的内存不能超过 1 MB。

每个 YAML 文件的最大深度限制为 100。YAML 文件的最大深度是其嵌套最多的 key 的嵌套层数,路径上的每个散列和数组都计入其深度。例如,以下 YAML 中嵌套最多的键的深度为 7:

dashboard: 'Test dashboard'
links:
- title: Link 1
  url: https://gitlab.com
panel_groups:
- group: Group A
  priority: 1
  panels:
  - title: "Super Chart A1"
    type: "area-chart"
    y_label: "y_label"
    weight: 1
    max_value: 1
    metrics:
    - id: metric_a1
      query_range: 'query'
      unit: unit
      label: Legend Label

合并请求

差异限制

极狐GitLab 有以下限制:

上限和下限适用于以下各项:

  • 更改文件的数量。
  • 更改的行数。
  • 显示的更改的累积大小。

下限会使多余的差异被折叠。上限可防止渲染发生更多更改。

合并请求报告大小限制

不会加载超过 20 MB 限制的报告。受影响的报告:

高级搜索限制

索引的最大文件大小

您可以对在 Elasticsearch 中索引的仓库文件的内容设置限制。任何大于此限制的文件仅索引文件名。 文件内容既非索引的,也不是可搜索的。

设置限制有助于减少索引进程的内存使用和整体索引大小。此值默认为 1024 KiB(1 MiB),因为任何大于此值的文本文件都可能不适合阅读。

您必须设置一个限制,因为不支持无限的文件大小。将此值设置为大于 GitLab Sidekiq 节点上的内存量会导致 GitLab Sidekiq 节点耗尽内存,因为此内存量是在索引期间预先分配的。

最大字段长度

您可以对为高级搜索编制索引的文本字段的内容设置限制。 设置最大值有助于减少索引进程的负载。如果任何文本字段超过此限制,则文本将被截断为此字符数。其余文本未编入索引,也无法搜索。 适用于所有索引数据,除了被索引的仓库文件,它们有一个单独的限制。获取更多信息,阅读索引的最大文件大小

  • 在 SaaS 上,字段长度限制为 20,000 个字符。
  • 对于自助管理实例,默认情况下,字段长度是无限的。

您可以在启用 Elasticsearch 时为自助管理安装配置此限制。 将限制设置为 0,可以禁用它。

推送事件限制

Webhooks 和项目服务

单次推送中的更改总数(分支或标签)。如果更改超过指定限制,则不会执行 hooks。

动态

单次推送中的更改(分支或标签)总数,确定是创建单个推送事件还是批量推送事件。

Package Registry 限制

文件大小限制

引入于 13.4 版本。

上传到 GitLab Package Registry 的软件包的默认最大文件大小因格式而异:

  • Conan: 3 GB
  • Generic: 5 GB
  • Helm: 5 MB
  • Maven: 3 GB
  • npm: 500 MB
  • NuGet: 500 MB
  • PyPI: 3 GB
  • Terraform: 1 GB

SaaS 上的最大文件大小可能会有所不同。

要为自助管理安装实例设置这些限制,请在 GitLab Rails 控制台中运行以下命令:

# File size limit is stored in bytes

# For Conan Packages
Plan.default.actual_limits.update!(conan_max_file_size: 100.megabytes)

# For npm Packages
Plan.default.actual_limits.update!(npm_max_file_size: 100.megabytes)

# For NuGet Packages
Plan.default.actual_limits.update!(nuget_max_file_size: 100.megabytes)

# For Maven Packages
Plan.default.actual_limits.update!(maven_max_file_size: 100.megabytes)

# For PyPI Packages
Plan.default.actual_limits.update!(pypi_max_file_size: 100.megabytes)

# For Debian Packages
Plan.default.actual_limits.update!(debian_max_file_size: 100.megabytes)

# For Helm Charts
Plan.default.actual_limits.update!(helm_max_file_size: 100.megabytes)

# For Generic Packages
Plan.default.actual_limits.update!(generic_packages_max_file_size: 100.megabytes)

将限制设置为 0,可以允许任何文件大小。

返回的软件包版本

当询问给定 NuGet 包名称的版本时,GitLab Package Registry 最多返回 300 个版本。

Dependency Proxy 限制

引入于 14.5 版本。

Dependency Proxy 中缓存的镜像的最大文件大小因文件类型而异:

  • Image blob: 5 GB
  • Image manifest: 10 MB

合并时的分支重定向

引入于 13.9 版本。

如果分支在打开的合并请求仍然指向它的情况下被合并,系统可以重新定位指向已合并分支的合并请求。