GitLabの503:原因と切り分け方
冒頭まとめ GitLab の API や Git 操作で 503 Service Unavailable が返ったら、まず応答の本文と Retry-After ヘッダーを確認してください。503 だけでは、原因を一つに決められません。 Gitaly の資源不足を示す本文なら、同時に実行されている処理や待ち行列が手がかりになります。一方、応答の大きさが上限を超えたことを示す本文なら、待つだけでは解消しない問題です。保守モード中の書き込みも 503 になる場合があります。 エラーの概要 API から返る応答の一例です。Gitaly は、GitLab で Git リポジトリへのアクセスを扱う部品です。 HTTP/1.1 503 Service Unavailable {"message":"Upstream Gitaly has been exhausted. Try again later"} この本文は、GitLab のGitaly エラー処理の実装にある文言の一つです。503 の本文は原因や応答を返した部品によって異なり、JSON とは限りません。Git コマンドやブラウザーでも、同じ本文がそのまま表示されるとは限りません。 まず最初に:応答と障害情報を確認する API で失敗した場合は、状態コードと本文に加えて、Retry-After があるか確認します。以下は読み取り要求の例です。URL とプロジェクト ID は実際の接続先に置き換えてください。 curl -i --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "https://gitlab.example.com/api/v4/projects/1/repository/commits" GITLAB_TOKEN は事前に設定したアクセストークンです。応答やコマンドの記録を共有する際は、トークンなどの秘密情報を含めないでください。 Retry-After があれば、指定された待ち時間を守って再試行します。書き込み要求で失敗した場合は、重複した変更を避けるため、再実行する前に対象の状態も確認してください。 GitLab.com を利用している場合は、GitLab の稼働状況ページでも障害や保守の情報を確認できます。自分で運用する GitLab の場合は、その環境の管理者に確認してください。 よくある原因と解決手順 Gitaly の資源不足 Upstream Gitaly has been exhausted と表示された場合は、Gitaly に関わる処理が資源不足として扱われています。GitLab の実装では、詳細な制限エラーや RESOURCE_EXHAUSTED を、この文言を含むエラーへ変換する経路があります。本文だけで同時実行数が原因だと断定せず、管理者は Gitaly のログや監視情報も確認してください。 ...