温馨提示×

如何解决CentOS GitLab卡顿

小樊
46
2026-08-29 20:21:48
栏目: 智能运维

解决 CentOS 上 GitLab 卡顿的问题,通常需要从系统资源、GitLab 配置、数据库、存储、网络等多个维度进行排查和优化。GitLab 本身是一个资源消耗较大的应用,尤其在运行时涉及 Ruby on Rails、PostgreSQL、Redis、Sidekiq、Gitaly 等多个组件。

下面是系统性排查和优化建议,按由易到难、由常见到少见的顺序来。


一、快速判断卡顿原因

1️⃣ 查看系统资源占用(最常见原因)

top
htop
free -h
df -h

重点关注:

  • CPU 是否长期 > 80%
  • 内存是否接近耗尽(swap 是否被使用)
  • 磁盘是否满了(尤其是 /var/opt/gitlab)

最低推荐配置(GitLab 官方)

  • CPU:4 核
  • 内存:8GB 起步(强烈建议 16GB)
  • 磁盘:SSD(非常重要)

二、最常见问题 & 解决方案

✅ 1. 内存不足(90% 卡顿的根源)

GitLab 会同时运行:

  • Unicorn / Puma
  • Sidekiq
  • PostgreSQL
  • Redis
  • Gitaly

检查内存

free -h

优化方案

限制并发进程数(最立竿见影)

编辑:

vim /etc/gitlab/gitlab.rb

1️⃣ 降低 Puma / Unicorn 并发

puma['worker_processes'] = 2
puma['min_threads'] = 1
puma['max_threads'] = 2

(如果是老版本 GitLab)

unicorn['worker_processes'] = 2

2️⃣ 减少 Sidekiq 并发

sidekiq['max_concurrency'] = 10

3️⃣ 禁用 Prometheus(如果不用监控)

prometheus_monitoring['enable'] = false

4️⃣ 应用配置

gitlab-ctl reconfigure
gitlab-ctl restart

三、数据库相关优化(PostgreSQL)

1️⃣ 查看慢查询

gitlab-rails dbconsole

2️⃣ 优化 PostgreSQL 配置

postgresql['shared_buffers'] = "512MB"
postgresql['max_connections'] = 100
postgresql['work_mem'] = "16MB"

应用:

gitlab-ctl reconfigure
gitlab-ctl restart postgresql

四、Gitaly(Git 操作卡顿重点)

Gitaly 是 GitLab 的 Git 核心服务,配置不当会严重卡顿。

1️⃣ 限制 Gitaly 并发

gitaly['concurrency'] = [
  {
    "rpc" => "/gitaly.SmartHTTPService/PostReceivePack",
    "max_per_repo" => 2
  }
]

五、存储与磁盘 IO 问题(非常关键)

1️⃣ 磁盘类型

  • ❌ HDD:非常容易卡
  • ✅ SSD:强烈推荐
  • ✅ NVMe:最佳

检查磁盘 IO:

iostat -x 1

2️⃣ Git 仓库迁移到高性能磁盘

git_data_dirs({
  "default" => {
    "path" => "/data/gitlab/git-data"
  }
})

然后执行:

gitlab-ctl reconfigure
gitlab-ctl restart

六、GitLab 版本问题

1️⃣ 是否版本过旧?

老版本 GitLab 性能问题常见。

查看版本:

gitlab-rake gitlab:env:info

建议:

  • 升级到 最新稳定版
  • 升级前务必备份

七、排查 GitLab 内部组件状态

1️⃣ 检查 GitLab 健康状况

gitlab-rake gitlab:check
gitlab-rake gitlab:doctor:git

2️⃣ 查看日志

gitlab-ctl tail
gitlab-ctl tail sidekiq
gitlab-ctl tail puma

八、其他优化建议

✅ 减少 CI Runner 并发

gitlab_ci['runner_capacity'] = 2

✅ 关闭未使用功能

  • Container Registry
  • Pages
  • Metrics
  • ElasticSearch(如果没用)

九、一键排查清单(推荐)

✅ 内存 ≥ 8GB
✅ Puma / Sidekiq 并发已限制
✅ 磁盘是 SSD
✅ Prometheus 已关闭
✅ GitLab 不是特别老版本
✅ 没有 swap 颠簸


十、如果你愿意,我可以更精准帮你

你可以直接贴出以下信息,我可以精准定位卡顿原因

  1. GitLab 版本
  2. CentOS 版本
  3. CPU / 内存配置
  4. tophtop 截图
  5. 是否使用 Docker
  6. 卡顿具体场景(页面、git clone、push、CI)

我可以直接给你一套适合你服务器的 gitlab.rb 配置

0