访问公司gitlab出现 502 Bad Gateway 错误,已经解决

文章目录

  • [1、通过 WindTerm 连接 Ubuntu](#1、通过 WindTerm 连接 Ubuntu)
  • [2、检查 GitLab 服务状态](#2、检查 GitLab 服务状态)
  • [3、查看 Unicorn 日志](#3、查看 Unicorn 日志)
  • [4、检查 Unicorn 的 stderr 日志](#4、检查 Unicorn 的 stderr 日志)
  • [5、检查 PID](#5、检查 PID)
  • [6、停止当前运行的 Unicorn 服务](#6、停止当前运行的 Unicorn 服务)
  • [7、确认 Unicorn 已停止](#7、确认 Unicorn 已停止)
  • [8、删除陈旧的 .pid 文件](#8、删除陈旧的 .pid 文件)
  • [9、重新启动 GitLab 服务](#9、重新启动 GitLab 服务)
  • 10、检查状态
  • [11、查看 Unicorn 日志](#11、查看 Unicorn 日志)

我公司的gitlab是部署在Ubuntu: 乌班图(也有友帮拓、优般图等译名)

1、通过 WindTerm 连接 Ubuntu

2、检查 GitLab 服务状态

首先,检查 GitLab 的各个服务是否正常运行:

bash 复制代码
sudo gitlab-ctl status
shell 复制代码
root@ubuntu20:~# sudo gitlab-ctl status
run: alertmanager: (pid 1422) 2245853s; run: log: (pid 1416) 2245853s
run: gitaly: (pid 1421) 2245853s; run: log: (pid 1414) 2245853s
run: gitlab-monitor: (pid 1440) 2245853s; run: log: (pid 1431) 2245853s
run: gitlab-workhorse: (pid 1436) 2245853s; run: log: (pid 1426) 2245853s
run: grafana: (pid 1437) 2245853s; run: log: (pid 1429) 2245853s
run: logrotate: (pid 8999) 2934s; run: log: (pid 1439) 2245853s
run: nginx: (pid 1434) 2245853s; run: log: (pid 1428) 2245853s
run: node-exporter: (pid 1438) 2245853s; run: log: (pid 1430) 2245853s
run: postgres-exporter: (pid 1425) 2245853s; run: log: (pid 1418) 2245853s
run: postgresql: (pid 1415) 2245853s; run: log: (pid 1412) 2245853s
run: prometheus: (pid 1432) 2245853s; run: log: (pid 1420) 2245853s
run: redis: (pid 1419) 2245853s; run: log: (pid 1413) 2245853s
run: redis-exporter: (pid 1424) 2245853s; run: log: (pid 1417) 2245853s
run: sidekiq: (pid 1435) 2245853s; run: log: (pid 1423) 2245853s
run: unicorn: (pid 426) 1s; run: log: (pid 1427) 2245853s

根据 gitlab-ctl status 输出的内容,GitLab 的大部分服务都在运行,但是 unicorn 进程的 PID 是 426,运行了仅 1 秒钟。unicorn 是 GitLab 的应用服务器,它处理主要的 HTTP 请求。如果 unicorn 反复重启或无法正常运行,这很可能是导致 502 Bad Gateway 错误的原因。

3、查看 Unicorn 日志

首先,检查 Unicorn 的日志,看看是什么原因导致它无法正常启动。日志文件位于 /var/log/gitlab/unicorn/。

运行以下命令查看 Unicorn 日志:

bash 复制代码
sudo cat /var/log/gitlab/unicorn/current
bash 复制代码
root@ubuntu20:~# sudo cat /var/log/gitlab/unicorn/current
2024-10-10_07:09:33.63838 failed to start a new unicorn master
2024-10-10_07:09:33.64968 starting new unicorn master
2024-10-10_07:09:33.87437 master failed to start, check stderr log for details
2024-10-10_07:09:34.88615 failed to start a new unicorn master
2024-10-10_07:09:34.89920 starting new unicorn master
2024-10-10_07:09:35.13327 master failed to start, check stderr log for details
2024-10-10_07:09:36.14580 failed to start a new unicorn master
2024-10-10_07:09:36.15991 starting new unicorn master
2024-10-10_07:09:36.40057 master failed to start, check stderr log for details
2024-10-10_07:09:37.41466 failed to start a new unicorn master
2024-10-10_07:09:37.42728 starting new unicorn master
2024-10-10_07:09:37.66208 master failed to start, check stderr log for details
2024-10-10_07:09:38.67082 failed to start a new unicorn master
2024-10-10_07:09:38.68441 starting new unicorn master
2024-10-10_07:09:38.91950 master failed to start, check stderr log for details

查看日志中是否有任何错误信息,比如内存不足、数据库连接问题等。

从日志中可以看出,Unicorn 服务的 master 进程无法启动,日志提到 master failed to start, check stderr log for details,这意味着你需要查看 stderr 日志文件中的更多详细信息,以了解具体的启动失败原因。

4、检查 Unicorn 的 stderr 日志

Unicorn 的 stderr 日志通常可以在以下路径中找到:

bash 复制代码
sudo cat /var/log/gitlab/unicorn/unicorn_stderr.log
bash 复制代码
root@ubuntu20:~# sudo cat /var/log/gitlab/unicorn/unicorn_stderr.log
ArgumentError: Already running on PID:1487 (or pid=/opt/gitlab/var/unicorn/unicorn.pid is stale)
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:205:in `pid='
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:137:in `start'
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/bin/unicorn:126:in `<top (required)>'
  /opt/gitlab/embedded/bin/unicorn:23:in `load'
  /opt/gitlab/embedded/bin/unicorn:23:in `<top (required)>'
ArgumentError: Already running on PID:1487 (or pid=/opt/gitlab/var/unicorn/unicorn.pid is stale)
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:205:in `pid='
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:137:in `start'
  /opt/gitlab/embedded/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/bin/unicorn:126:in `<top (required)>'
  /opt/gitlab/embedded/bin/unicorn:23:in `load'
  /opt/gitlab/embedded/bin/unicorn:23:in `<top (required)>'

从错误日志中可以看出,Unicorn 尝试启动时遇到了 ArgumentError: Already running on PID:1487 错误。这意味着 Unicorn 认为自己已经在运行,或者 unicorn.pid 文件是陈旧的,并且没有正确清理。

这是一个常见问题,通常发生在 Unicorn 崩溃或意外停止后,未正确删除 .pid 文件,从而阻止新的 Unicorn 实例启动

5、检查 PID

首先,确认 Unicorn 是否真的在运行:

bash 复制代码
ps -ef | grep unicorn

如果 Unicorn 实例已经运行,会显示它的进程信息。如果没有运行但仍然有 .pid 文件,则是因为这个 .pid 文件已经陈旧。

bash 复制代码
root@ubuntu20:~# ps -ef | grep unicorn
root      1410  1394  0 Sep15 ?        00:09:06 runsv unicorn
root      1427  1410  0 Sep15 ?        00:01:54 svlogd -tt /var/log/gitlab/unicorn
git       4369  1410  0 15:03 ?        00:00:00 /bin/bash /opt/gitlab/embedded/bin/gitlab-unicorn-wrapper
git       4384  4369  0 15:03 ?        00:00:00 /opt/gitlab/embedded/bin/unicorn -D -E production -c /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru
root      4386 10412  0 15:03 pts/0    00:00:00 grep --color=auto unicorn

从输出结果中可以看出,Unicorn 的相关进程已经在运行:

  • gitlab-unicorn-wrapper (PID 4369)
  • unicorn 主进程 (PID 4384)

但是,你之前遇到的错误显示 Unicorn 已经在运行,可能是由于在尝试启动新实例时,旧的 Unicorn 进程仍在运行。这种情况通常发生在重启不干净或崩溃时。

解决步骤:停止当前运行的 Unicorn 服务

6、停止当前运行的 Unicorn 服务

为了清理当前的进程,可以停止 GitLab 的 Unicorn 服务:

bash 复制代码
sudo gitlab-ctl stop unicorn

这将停止所有 Unicorn 相关的进程。

bash 复制代码
root@ubuntu20:~# sudo gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up

7、确认 Unicorn 已停止

再次运行以下命令,确保所有 Unicorn 进程都已停止:

bash 复制代码
ps -ef | grep unicorn
bash 复制代码
root@ubuntu20:~# ps -ef | grep unicorn
root      1410  1394  0 Sep15 ?        00:09:06 runsv unicorn
root      1427  1410  0 Sep15 ?        00:01:54 svlogd -tt /var/log/gitlab/unicorn
root      6447 10412  0 15:05 pts/0    00:00:00 grep --color=auto unicorn

从当前的输出结果来看,Unicorn 的主要进程(如 gitlab-unicorn-wrapper 和 unicorn)已经不在运行,只有日志相关的进程 (runsv unicorn 和 svlogd) 在运行,这表示 Unicorn 已成功停止。

接下来,可以按照以下步骤继续操作:

8、删除陈旧的 .pid 文件

确保删除陈旧的 Unicorn PID 文件,以避免启动时冲突:

bash 复制代码
sudo rm /opt/gitlab/var/unicorn/unicorn.pid
bash 复制代码
root@ubuntu20:~# sudo rm /opt/gitlab/var/unicorn/unicorn.pid

9、重新启动 GitLab 服务

在清理 .pid 文件后,重新启动 GitLab 服务,确保 Unicorn 重新正常启动:

bash 复制代码
sudo gitlab-ctl restart
bash 复制代码
root@ubuntu20:~# sudo gitlab-ctl restart
ok: run: alertmanager: (pid 6491) 0s
ok: run: gitaly: (pid 6500) 0s
ok: run: gitlab-monitor: (pid 6523) 1s
ok: run: gitlab-workhorse: (pid 6525) 0s
ok: run: grafana: (pid 6535) 1s
ok: run: logrotate: (pid 6545) 0s
ok: run: nginx: (pid 6627) 0s
ok: run: node-exporter: (pid 6632) 1s
ok: run: postgres-exporter: (pid 6640) 0s
ok: run: postgresql: (pid 6650) 1s
ok: run: prometheus: (pid 6659) 0s
ok: run: redis: (pid 6667) 1s
ok: run: redis-exporter: (pid 6671) 0s
ok: run: sidekiq: (pid 6678) 1s
ok: run: unicorn: (pid 6684) 0s

10、检查状态

重新启动后,检查所有 GitLab 服务的状态,确保 Unicorn 进程已经成功启动:

bash 复制代码
sudo gitlab-ctl status
bash 复制代码
root@ubuntu20:~# sudo gitlab-ctl status
run: alertmanager: (pid 6491) 15s; run: log: (pid 1416) 2246223s
run: gitaly: (pid 6500) 14s; run: log: (pid 1414) 2246223s
run: gitlab-monitor: (pid 6523) 14s; run: log: (pid 1431) 2246223s
run: gitlab-workhorse: (pid 6525) 13s; run: log: (pid 1426) 2246223s
run: grafana: (pid 6535) 13s; run: log: (pid 1429) 2246223s
run: logrotate: (pid 6545) 12s; run: log: (pid 1439) 2246223s
run: nginx: (pid 6627) 12s; run: log: (pid 1428) 2246223s
run: node-exporter: (pid 6632) 12s; run: log: (pid 1430) 2246223s
run: postgres-exporter: (pid 6640) 11s; run: log: (pid 1418) 2246223s
run: postgresql: (pid 6650) 11s; run: log: (pid 1412) 2246223s
run: prometheus: (pid 6659) 10s; run: log: (pid 1420) 2246223s
run: redis: (pid 6667) 10s; run: log: (pid 1413) 2246223s
run: redis-exporter: (pid 6671) 9s; run: log: (pid 1417) 2246223s
run: sidekiq: (pid 6678) 9s; run: log: (pid 1423) 2246223s
run: unicorn: (pid 6684) 8s; run: log: (pid 1427) 2246223s

11、查看 Unicorn 日志

最后,查看 Unicorn 的日志文件,确保没有新的错误:

bash 复制代码
sudo cat /var/log/gitlab/unicorn/current
bash 复制代码
root@ubuntu20:~# sudo cat /var/log/gitlab/unicorn/current
2024-10-11_07:05:24.03624 Received TERM from runit, sending to process group (-PID)
2024-10-11_07:06:27.33565 starting new unicorn master
2024-10-11_07:06:47.00138 adopted new unicorn master 6699

从日志中可以看出,Unicorn 服务在 2024-10-11_07:06:27 启动了一个新的主进程 (unicorn master),并且在 2024-10-11_07:06:47 成功接管了新的 Unicorn 主进程 (PID 6699),日志中没有显示任何错误。这意味着 Unicorn 服务现在已经成功启动,并且运行正常。

相关推荐
极小狐3 小时前
极狐GitLab 功能标志详解
linux·运维·服务器·elasticsearch·gitlab·极狐gitlab
极小狐3 小时前
在极狐GitLab 身份验证中如何使用 JWT?
gitlab·devsecops·devops·mcp
丑过三八线5 小时前
在Linux下安装Gitlab
linux·运维·gitlab
IT布道6 小时前
GitLab本地安装指南
gitlab
极小狐7 小时前
极狐GitLab 安全文件管理功能介绍
linux·运维·数据库·安全·elasticsearch·gitlab
星释12 小时前
GitLab-CI集成FTP自动发布
elasticsearch·ci/cd·gitlab
angushine2 天前
Gateway获取下游最终响应码
java·开发语言·gateway
HX科技2 天前
树莓派_利用Ubuntu搭建gitlab
数据库·ubuntu·gitlab
鬼布2 天前
post请求在gateway打印日志内存遗漏
java·gateway
清瞳清2 天前
软件包安装管理Gitlab
gitlab·deb