Linux下GitLab故障怎么排查
小樊
44
2025-12-22 11:40:28
Linux下GitLab故障排查步骤
一 快速定位与通用检查
查看整体状态与组件健康:执行gitlab-ctl status ,对异常组件执行gitlab-ctl restart <组件> ;必要时执行gitlab-ctl reconfigure 使配置生效。
集中查看日志:使用gitlab-ctl tail 实时跟踪全部日志,或定位到具体组件,如gitlab-ctl tail nginx/gitlab_error.log 、gitlab-ctl tail gitlab-rails 。
系统层面巡检:用top/htop 检查CPU/内存/IO 是否紧张;用df -h 确认磁盘空间 ;检查端口占用(如80/443/22 )是否冲突。
外部连通性:对域名执行ping/nslookup/dig 验证解析与网络;核对防火墙/安全组 是否放行必要端口。
资源基线:GitLab对资源较敏感,生产环境建议至少4GB内存 ,否则易出现启动缓慢或异常。
二 常见症状与处理要点
访问出现502/504 :多为后端未就绪或反向代理超时。检查关键组件(如unicorn/puma、gitaly、gitlab-workhorse、postgresql、nginx )是否Running;必要时调整超时与并发(如unicorn[‘timeout’] 、gitlab_workhorse[‘auth_backend’] ),再执行reconfigure && restart 。
页面403 Forbidden :常见于rack_attack 限流/黑名单拦截。可在**/etc/gitlab/gitlab.rb中配置白名单:
gitlab_rails[‘rack_attack_git_basic_auth’] = { ‘enabled’ => true, ‘ip_whitelist’ => [“127.0.0.1”,“服务器IP”], ‘maxretry’ => 10, ‘findtime’ => 60, ‘bantime’ => 3600 }
修改后执行 gitlab-ctl reconfigure**。
端口冲突 (80/443/22):用lsof -i:80 或ss -tlnp 定位占用进程并释放或调整端口映射;容器部署时同步修改docker-compose.yml 的端口。
reconfigure/启动卡住 :异常关机或runit异常后可能出现runsv not running 。可执行systemctl restart gitlab-runsvdir ,必要时直接启动**/opt/gitlab/embedded/bin/runsvdir-start恢复supervise;随后再 reconfigure/start**。
权限/SELinux问题 :确保**/var/log/gitlab等目录可写;SELinux启用时可用 sestatus检查并用 semanage fcontext/restorecon**修正上下文。
内存不足 :表现为卡顿、OOM或组件反复重启。优先释放内存、增加swap 或扩容;随后重启服务。
三 按部署方式的专项排查
Omnibus包部署(CentOS/RHEL/Debian/Ubuntu)
核对**/etc/gitlab/gitlab.rb关键项:external_url 、邮件 SMTP**、端口与反向代理设置;变更后执行gitlab-ctl reconfigure 。
日志集中在**/var/log/gitlab**;用gitlab-ctl tail 快速定位组件报错。
系统资源与端口冲突优先排查,其次再检查组件依赖与数据库连通性。
Docker部署
容器状态:docker ps -a ;查看容器日志:docker logs <container_id> ;进入容器核查配置:docker exec -it /bin/bash 。
端口映射冲突时,调整docker-compose.yml 的ports (如将宿主机80映射为容器8080等);重启后复核日志与连通性。
四 数据保护与恢复
定期备份:执行gitlab-rake gitlab:backup:create ,默认备份目录为**/var/opt/gitlab/backups**。
恢复流程:停止相关写入服务(如gitlab-ctl stop unicorn/puma sidekiq ),执行gitlab-rake gitlab:backup:restore BACKUP=xxx (xxx为备份文件名),完成后gitlab-ctl reconfigure && gitlab-ctl start 。
变更前务必完成备份 ,并在恢复后做配置与数据校验 。
五 高效日志分析技巧
组件日志:使用gitlab-ctl tail <组件名>快速查看;如 nginx/gitlab_error.log 、gitlab-rails/production.log 。
关键字检索:对production.log 执行**grep -i “error”**或按时间过滤,定位异常堆栈与SQL慢查询。
系统日志:在systemd系统可用journalctl -u gitlab 或按时间窗口检索(如**–since/–until**)。
长期分析:将**/var/log/gitlab接入 ELK/Graylog/Splunk**,结合logrotate 做日志轮转与留存策略。