Swap分区作为虚拟内存,可在物理内存不足时临时存储数据,避免GitLab因内存耗尽崩溃。
cat /proc/swaps,若无输出则表示未启用Swap。dd if=/dev/zero of=/data/swap bs=512 count=8388616 # bs*count=4GB(512*8388616=4294971392 bytes)
mkswap /data/swap # 格式化为Swap分区
chmod 600 /data/swap # 设置权限(仅root可读写)
swapon /data/swap # 启用Swap
/etc/fstab文件,添加以下行:/data/swap swap swap defaults 0 0
vm.swappiness控制内核使用Swap的倾向(0-100,默认0表示尽量不用Swap)。执行以下命令临时调整(重启失效),并永久修改:sysctl -w vm.swappiness=60 # 临时调整为60(推荐值,平衡内存与Swap使用)
echo "vm.swappiness=60" >> /etc/sysctl.conf # 永久生效
通过调整GitLab核心组件的进程数和资源限制,降低内存消耗。
worker_processes参数控制其工作进程数(默认2,可根据CPU核心数调整,建议不超过CPU核心数的1.5倍)。编辑/etc/gitlab/gitlab.rb:unicorn['worker_processes'] = 2 # 最低值为2,避免设置过高
max_concurrency参数控制并发任务数(默认25,可根据内存情况降低)。编辑/etc/gitlab/gitlab.rb:sidekiq['max_concurrency'] = 10 # 降低并发数,减少内存占用
shared_buffers参数控制共享内存缓冲区大小(默认64MB,可根据内存调整,建议为物理内存的1/4)。编辑/etc/gitlab/gitlab.rb:postgresql['shared_buffers'] = "64MB" # 示例:小内存服务器设置为64MB
postgresql['max_worker_processes'] = 1 # 降低数据库工作进程数
/etc/gitlab/gitlab.rb:gitlab_rails['smart_proxy'] = true # 启用智能代理缓存
若上述方法仍无法满足需求,需升级服务器硬件:
Docker可通过容器限制GitLab的内存使用,避免影响宿主机其他服务:
docker pull gitlab/gitlab-ce--memory参数限制容器最大内存(如4GB),--memory-swap参数限制总内存(包括Swap):docker run -d --name gitlab \
--memory="4g" --memory-swap="4g" \ # 限制容器最大使用4GB内存(无Swap)
-p 8080:80 -p 2222:22 \ # 映射端口
-v /path/to/gitlab/config:/etc/gitlab \ # 挂载配置目录
-v /path/to/gitlab/logs:/var/log/gitlab \ # 挂载日志目录
-v /path/to/gitlab/data:/var/opt/gitlab \ # 挂载数据目录
gitlab/gitlab-ce
通过监控工具实时跟踪GitLab内存使用情况,及时调整配置:
http://<服务器IP>:8080/-/metrics),可查看内存、CPU等指标。gitlab-rake cache:clear)、过期备份和构建产物,释放内存空间。通过以上步骤,可有效解决CentOS上GitLab内存不足的问题。需根据服务器实际情况(如内存大小、用户数量)调整配置参数,优先采用启用Swap和优化配置的方法,若仍无法满足需求再考虑升级硬件或使用Docker部署。