解決一次gitlab因異常關機導致啟動失敗
1. 伺服器異常關機
眾所周知,伺服器會因為記憶體不足或者cpu使用率過高而出現異常關機現象,筆者昨天經歷了此車禍現場。造成的暫難就是gitlab程式碼託管服務起不來。想告訴各位讀者的是,當你的gitlab服務遇到這種情況的時候,如何去定位問題,解決問題。
2. gitlab服務
容器啟動成功,但是處於unhealthy狀態,登入介面500。
需要說明的一點是我的gitlab服務部署在linux上.
2.1 進入gitlab容器內部
docker exec -it bd0 bash
2.2 檢查gitlab各服務狀態
gitlab-ctl status
當時出現的是redis服務down了,當時沒截圖,網上找了個圖,類似這樣
失敗提示:
down:redis:0s,normally up,want up;run:log:(pid 1022)1302s
也就是gitlab之所以前端顯示500起不來,是因為redis服務沒起來,所以我們只需要重點關注redis服務沒起來的相關日誌。
2.3 檢視production.log日誌
tail -f /var/log/gitlab/gitlab-rails/production.log
報錯資訊:Error connecting to Redis on /var/opt/gitlab/redis/redis.socket (Errno::ECONNREFUSED)):
從錯誤資訊中只能看到redis連線失敗,並不能得到更多的有效定位錯誤的資訊,繼續檢視gitlab的執行日誌來尋找資訊,
2.4 檢查gitlab相關日誌
實時檢視日誌輸出命令
gitlab-ctl tail
此處也可以在docker外面執行
docker logs gitlab
提示如下錯誤:
初步分析是應用在執行狀態下,redis被強制停止造成了資料檔案不完整,重啟redis就會失敗。
因此,我找到了redis的資料檔案,刪掉了資料檔案dump.rdb,然後重啟gitlab就好了
我的redis資料路由設定(可在docker-compose.yml檔案中設定)在docker 外面
/gitlab/data/redis#
至此,gitlab啟動成功
起初以為是資料夾許可權問題,docker內部無法獲取root許可權,把docker外面redis的 overcommit_memory置1,然後重啟gitlab的docker,overcommit_memory同步為1。但是gitlab還是啟動失敗
3 小結
可能gitlab報500錯誤的原因各種各樣,但是查服務狀態,查對應down服務的日誌,想對應策略的方法一樣,希望對你有所啟發。
版權宣告:本文為博主翻譯文章+自己理解,部分程式碼自己寫,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。 本文連結:https://www.cnblogs.com/JerryMouseLi/p/15542368.html