4核8G云服务器部署GitLab内存耗尽解决方案

文章目录

前言

阿里云官方给出的方案是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
相关推荐
极小狐2 天前
极狐GitLab万人并发架构实践,大规模组织的扩容路线图
架构·gitlab·极狐gitlab
Lvan的前端笔记3 天前
GitLab CI 环境变量整理
ci/cd·gitlab
李迟4 天前
CICD实例:解决GitLab Runner无法执行CICD问题
gitlab
hanjq_code6 天前
gitlab本地文件 跨分支 忽略改动 不提交
gitlab
极小狐6 天前
极狐GitLab集群高可用方案,多节点架构与故障自愈实践
架构·gitlab·高可用·极狐gitlab
极小狐7 天前
极狐GitLab主备同步延迟治理,复制滞后监控与优化方法
gitlab·极狐gitlab·geo容灾
极小狐7 天前
跨项目流水线报 404 Not Found?CI_JOB_TOKEN 允许名单 9 步排查
ci/cd·gitlab·devops·权限管理·流水线·极狐gitlab·作业令牌
极小狐8 天前
极狐GitLab双机热备搭建指南,主机备机部署与切换实操
gitlab·高可用·极狐gitlab
有同事要进步14 天前
如何在github或者是gitlab上创建空文件
gitlab·github
GoodStudyAndDayDayUp16 天前
gitlab私有化跑CICD
gitlab·gitlab私有化跑cicd