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
相关推荐
洋就在江州1 小时前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
成为你的宁宁1 天前
【Ubuntu 18.04安装Gitlab】
ubuntu·gitlab
长春的KAKA1 天前
GitLab 项目页面报 500 错误的完整修复记录:PostgreSQL 数据库损坏、统计表缺失及数据库迁移
数据库·postgresql·gitlab
蓝胖的四次元口袋1 天前
GitLab知识梳理
gitlab
极小狐10 天前
CI 作业里 kubectl 连不上集群?用 Kubernetes Agent 打通部署链路的 7 个步骤
ci/cd·kubernetes·gitlab·devops·k8s部署
Zhou14113610 天前
Git_02_GitLab协作与CI_CD
git·ci/cd·gitlab
白帽攻防录10 天前
SRC 挖洞:GitLab GraphQL 指令绕过深度复盘,CVE-2026-19478 未授权删项目怎么打穿代码托管平台
网络·网络安全·gitlab·graphql
daemon.qiang21 天前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
snow@li25 天前
服务器运维:K3S 下 Jenkins ↔ GitLab 的 CI/CD 闭环 / 访问成功
运维·gitlab·jenkins