当GitLab因内存不足导致服务卡顿或崩溃时,启用Swap分区是最快速的临时解决方案,可为系统提供虚拟内存缓冲。
dd if=/dev/zero of=/data/swap bs=512 count=8388616 # 创建512MB*8388616=4GB的Swap文件
mkswap /data/swap # 格式化为Swap分区
swapon /data/swap # 启用Swap
/etc/fstab文件,添加以下行:/data/swap swap swap defaults 0 0
vm.swappiness参数(范围0-100,值越小越倾向于使用物理内存):sysctl -w vm.swappiness=60 # 临时生效
echo "vm.swappiness=60" >> /etc/sysctl.conf # 永久生效
通过修改GitLab的主配置文件/etc/gitlab/gitlab.rb,可针对性降低内存占用:
unicorn['worker_processes'] = 2 # 最低2个,中型团队建议4个
puma['worker_processes'] = 2 # 若使用Puma集群模式
sidekiq['max_concurrency'] = 10 # 根据CPU核心数调整(建议=CPU核心数*2)
postgresql['shared_buffers'] = "64MB" # 小内存服务器建议64-128MB
postgresql['max_worker_processes'] = 2 # 根据CPU核心数调整
puma['enable'] = false # 若使用Unicorn,可禁用Puma
GitLab对内存的需求随用户数量、仓库规模增长而增加,升级硬件是最根本的解决方式:
gitlab_rails['smart_proxy'] = true # 启用智能代理缓存
gitlab-rake gitlab:cleanup:artifacts # 清理artifacts(保留7天)
gitlab-rake gitlab:cleanup:logs # 清理日志(保留30天)
若使用Docker部署GitLab,可通过限制容器内存和优化镜像减少内存占用:
--memory参数(如4GB):docker run -d --memory=4g --memory-swap=4g -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/gitlab-ce:alpine),减少镜像体积和内存占用。通过以上步骤,可逐步解决CentOS上GitLab的内存问题,从临时缓解到长期优化,确保服务稳定运行。需根据实际服务器配置和团队规模调整参数,避免过度优化导致性能下降。