ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

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

4核8G云服务器部署GitLab内存耗尽解决方案 文章目录前言原因解决方案创建Swap分区修改配置文件前言阿里云官方给出的方案是4核8G为最小部署Gitlab的配置实际上配置完成后云服务器的内存资源几乎被耗尽本文将会给出对应的解决方案原因可以先通过free -h查看内存占用情况装完GitLab后8G内存的 available 只剩下不到1G可用bashfree -hbash total used free shared buff/cache available Mem: 7.4Gi 7.3Gi 119Mi 280Mi 500Mi 92Mi Swap: 0B 0B 0B通过此命令我们可以查看占用内存最高的10个进程psaux--sort-%mem|head-10我们可以观察到占用内存最多的进程为 sidekiq、puma 等。sidekiq负责后台异步任务如提交代码后更新仓库索引、生成代码差异、MR合并、通知消息、仓库统计、邮件通知、后台各种计算任务。sidekiq是单进程多线程架构默认并发数很高虽然单个线程占用内存不大但叠加起来的总内存占用并不小。puma就是GitLab用来提供网页访问的Web服务器浏览器打开GitLab网页、登录、看代码全部由puma处理。puma为了提高并发处理能力会启动多个worker进程每个工作进程会单独占用一块内存通常1GB左右而且每个worker进程里还会跑线程。以上是导致内存耗尽的主要原因。解决方案创建Swap分区swap 是磁盘虚拟内存速度远慢于物理内存如果长时间大量占用swap系统会很卡。swap只是应急兜底加上swap服务器就不容易突然崩掉# 1. 创建4G大小的swap文件fallocate-l4G /swapfile# 2. 只允许root读写chmod600/swapfile# 3. 把这个文件格式化成swap交换空间mkswap/swapfile# 4. 立刻启用swapswapon/swapfile# 5. 写入/etc/fstab服务器重启自动挂载swapecho/swapfile none swap sw 0 0|tee-a/etc/fstab修改配置文件这里可以选择合适的工具打开配置文件nano/etc/gitlab/gitlab.rb修改gitlab配置文件有两种方法一是直接在配置文件上修改再去掉注释但是这样找起来比较麻烦。二是直接在末尾添加无注释的配置信息这样后续的配置会覆盖前面的配置比如找到Puma这一栏可以看到工作进程为2最大最小线程都为4以下都建议先看看自己的GitLab配置文件中对应配置行是否与我这相同如果相同可以直接粘贴在配置文件末尾找到 puma 一栏修改工作进程线程数puma[worker_processes]1puma[min_threads]1puma[max_threads]2找到sidekiq一栏修改后台任务的并发线程数如果是个人使用或小团队场景可以设为5到10sidekiq[concurrency]5还有一些GitLab内置监控组件这里可以自行选择进行关闭这些监控对本地的代码托管和CI/CD功能没有影响只是后台的监控菜单看不到对应的监控数据了#内置 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
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进