文章目录
前言
阿里云官方给出的方案是4核8G为最小部署Gitlab的配置,实际上配置完成后,云服务器的内存资源几乎被耗尽,本文将会给出对应的解决方案
原因
可以先通过 free -h 查看内存占用情况,装完GitLab后,8G内存的 available 只剩下不到1G可用```bash
free -h
```bash
total used free shared buff/cache available
Mem: 7.4Gi 7.3Gi 119Mi 280Mi 500Mi 92Mi
Swap: 0B 0B 0B
通过此命令我们可以查看占用内存最高的10个进程
bash
ps aux --sort=-%mem | head -10

我们可以观察到占用内存最多的进程为 sidekiq、puma 等。
sidekiq负责后台异步任务,如提交代码后更新仓库索引、生成代码差异、MR合并、通知消息、仓库统计、邮件通知、后台各种计算任务。sidekiq是单进程多线程架构,默认并发数很高,虽然单个线程占用内存不大,但叠加起来的总内存占用并不小。
puma就是GitLab用来提供网页访问的Web服务器,浏览器打开GitLab网页、登录、看代码,全部由puma处理。puma为了提高并发处理能力,会启动多个worker进程,每个工作进程会单独占用一块内存,通常1GB左右,而且每个worker进程里还会跑线程。
以上是导致内存耗尽的主要原因。
解决方案
创建Swap分区
swap 是磁盘虚拟内存,速度远慢于物理内存,如果长时间大量占用swap,系统会很卡。swap只是应急兜底,加上swap,服务器就不容易突然崩掉
bash
# 1. 创建4G大小的swap文件
fallocate -l 4G /swapfile
# 2. 只允许root读写
chmod 600 /swapfile
# 3. 把这个文件格式化成swap交换空间
mkswap /swapfile
# 4. 立刻启用swap
swapon /swapfile
# 5. 写入/etc/fstab,服务器重启自动挂载swap
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
修改配置文件
这里可以选择合适的工具打开配置文件
bash
nano /etc/gitlab/gitlab.rb
修改gitlab配置文件有两种方法
一是直接在配置文件上修改,再去掉注释,但是这样找起来比较麻烦。
二是直接在末尾添加无注释的配置信息,这样后续的配置会覆盖前面的配置
比如找到Puma这一栏,可以看到工作进程为2,最大最小线程都为4

以下都建议先看看自己的GitLab配置文件中对应配置行是否与我这相同,如果相同,可以直接粘贴在配置文件末尾
找到 puma 一栏,修改工作进程线程数
bash
puma['worker_processes'] = 1
puma['min_threads'] = 1
puma['max_threads'] = 2
找到sidekiq一栏修改后台任务的并发线程数,如果是个人使用或小团队场景,可以设为5到10
bash
sidekiq['concurrency'] = 5
还有一些GitLab内置监控组件,这里可以自行选择进行关闭,这些监控对本地的代码托管和CI/CD功能没有影响,只是后台的监控菜单看不到对应的监控数据了
bash
#内置 Prometheus 时序数据库,存储各项监控指标
prometheus['enable'] = false
#告警管理器,指标异常时触发告警通知
alertmanager['enable'] = false
#采集服务器硬件指标:CPU、内存、磁盘、网络负载
node_exporter['enable'] = false
#采集 Redis 性能指标
redis_exporter['enable'] = false
#采集 GitLab 自带 PostgreSQL 数据库指标
postgres_exporter['enable'] = false
#PgBouncer 数据库连接池
pgbouncer_exporter['enable'] = false
#专门采集 GitLab 自身业务指标
gitlab_exporter['enable'] = false