Ubuntu 上 GitLab 性能优化实操指南
一 硬件与系统基础
- 使用SSD/NVMe作为数据盘,I/O 是 Git 仓库读写与 CI 流水线的关键瓶颈;CPU 与内存建议至少4 核 + 8GB,更稳妥为8 核 + 16GB以上。
- 保持系统与 GitLab 版本及时更新,获取性能修复与改进。
- 启用监控与告警(如 Prometheus + Grafana),关注P95/P99 响应时间、数据库查询耗时、Sidekiq 队列积压等关键指标。
- 对外静态资源启用CDN 加速,降低页面与附件访问延迟。
- 规划备份与恢复演练,确保备份可用、恢复流程熟练。
二 资源受限环境的精简配置(测试/小型实例)
- 备份原始配置并编辑:sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak && sudo vim /etc/gitlab/gitlab.rb
- 精简组件(仅限测试/个人环境):
monitoring_role[‘enable’] = false
prometheus[‘enable’] = false
alertmanager[‘enable’] = false
postgres_exporter[‘enable’] = false
redis_exporter[‘enable’] = false
node_exporter[‘enable’] = false
- 降低 Rails/Puma 与 Sidekiq 资源占用:
puma[‘worker_processes’] = 1
puma[‘min_threads’] = 1
puma[‘max_threads’] = 2
sidekiq[‘concurrency’] = 4
- 降低数据库内存占用:
postgresql[‘shared_buffers’] = “128MB”
postgresql[‘work_mem’] = “4MB”
- 应用配置并重启:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart
- 说明:puma、sidekiq、gitaly、redis、postgresql、nginx 为核心组件,不要随意关闭;生产环境不建议禁用 Puma 的 cluster 模式。
三 中大型实例的并发与数据库调优(8 核 16GB 示例)
- 提升 Puma 并发能力(示例值,按实际压测微调):
puma[‘worker_processes’] = 4
puma[‘min_threads’] = 2
puma[‘max_threads’] = 4
- 提升数据库连接池(Rails 与 PgBouncer 场景按需):
gitlab_rails[‘db_pool’] = 200
- PostgreSQL 关键参数(示例值,结合内存与负载调优):
postgresql[‘shared_buffers’] = “1GB”
postgresql[‘work_mem’] = “16MB”
postgresql[‘maintenance_work_mem’] = “128MB”
- 应用配置并重启:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart
- 建议基于实际负载做压测与 A/B 调参,避免一次性拉满资源。
四 存储与数据布局优化
- 使用对象存储(如 S3/MinIO)承载LFS、上传附件、制品、备份等非核心数据,减轻本地磁盘压力并便于横向扩展。
- 迁移仓库数据目录(示例将默认 /var/opt/gitlab/git-data 迁至 /data/gitlab/git-data):
- 停服务:sudo gitlab-ctl stop
- 迁移数据:rsync -av /var/opt/gitlab/git-data/ /data/gitlab/git-data/
- 修改配置:在 /etc/gitlab/gitlab.rb 中设置
git_data_dirs({ “default” => { “path” => “/data/gitlab/git-data” } })
- 使配置生效:sudo gitlab-ctl reconfigure && sudo gitlab-ctl start
- 预防仓库操作临时文件占满磁盘:监控 /var/opt/gitlab/git-data 下异常增长的tmp_pack_* 文件,必要时在安全窗口清理并排查仓库异常操作或大对象导入。
五 运维与日常优化
- 启用 HTTPS/LetsEncrypt:
letsencrypt[‘enable’] = true
letsencrypt[‘contact_emails’] = [‘admin@example.com’]
letsencrypt[‘auto_renew’] = true
letsencrypt[‘auto_renew_hour’] = “1”
letsencrypt[‘auto_renew_minute’] = “30”
letsencrypt[‘auto_renew_day_of_month’] = “*/5”
external_url ‘https://gitlab.example.com’
- 大文件管理:启用 Git LFS,避免将大文件直接提交到仓库;定期清理无用分支与制品,减少仓库膨胀与克隆耗时。
- 定期维护:执行仓库GC/清理任务,优化对象存储与本地缓存;对流水线产物与日志设置生命周期与保留策略。
- 高可用与扩展:按需部署多实例 + 负载均衡(HAProxy/Nginx),对 Gitaly 采用集群模式提升稳定性与吞吐。