GitLab在Linux上的问题排查方法
使用gitlab-ctl status命令检查GitLab各组件(如nginx、postgresql、unicorn等)的运行状态。若服务未运行或显示异常(如“down”),可通过gitlab-ctl restart重启服务,或针对特定组件(如nginx)执行gitlab-ctl restart nginx单独重启。
GitLab的日志集中存储在/var/log/gitlab目录下,涵盖rails应用、nginx、gitaly等组件。常用日志查看命令:
tail -f /var/log/gitlab/gitlab-rails/production.log:实时跟踪rails应用的最新日志(如请求错误、数据库操作异常);grep "error\|fail" /var/log/gitlab/gitlab-ctl/production.log:筛选包含“error”或“fail”的关键错误信息;gitlab-ctl tail:一次性查看所有组件的日志输出,快速定位问题源头。GitLab的主配置文件为/etc/gitlab/gitlab.rb,修改后需执行gitlab-ctl reconfigure使配置生效(如更新external_url、邮件服务器设置)。若配置错误(如端口冲突、路径不存在),可通过gitlab-ctl reconfigure自动修正部分问题,或手动编辑配置文件并重启服务。
使用top、htop或vmstat命令监控服务器的CPU、内存、磁盘IO使用情况。若资源不足(如内存占用超过80%、磁盘空间剩余<10%),可能导致GitLab响应缓慢或服务崩溃。需清理过期构建产物(gitlab-rake gitlab:cleanup:orphan_job_artifacts)、扩容服务器或优化GitLab配置(如调整unicorn的worker_processes)。
使用ping命令测试GitLab服务器的网络可达性(如ping gitlab.example.com);用netstat -tulnp或ss -tulnp检查GitLab监听的端口(如80、443、22)是否正常;通过telnet <IP> <端口>或nc -zv <IP> <端口>验证端口是否被防火墙阻止。若端口被占用,可通过lsof -i:<端口>查找占用进程并终止。
若遇到“Permission denied”错误(如无法克隆仓库、访问页面),需检查相关文件/目录的权限:
/var/opt/gitlab)需属于git用户和git组(chown -R git:git /var/opt/gitlab);/var/log/gitlab)需具备可写权限(chmod -R 755 /var/log/gitlab);~/.ssh/id_rsa.pub已添加至GitLab账户的SSH Keys设置中。gitlab-ctl status unicorn),并查看/var/log/gitlab/nginx/error.log中的具体错误(如连接超时);postgresql服务状态(gitlab-ctl status postgresql),并查看/var/log/gitlab/postgresql/current中的日志(如连接数超限、磁盘空间不足);gitlab-runner status检查Runner状态,若离线需重启服务(gitlab-runner restart),并确保Runner的token未过期(可在GitLab控制台重新生成token并配置)。