GitLabの504:原因と切り分け方
冒頭まとめ GitLab への要求で 504 Gateway Timeout が返ったら、まず失敗した操作と、504 を返した部品を確認してください。大きなリポジトリの git clone なら、GitLab の手前にある負荷分散装置や中継サーバーの待ち時間が手がかりになります。一方、ファイルのアップロードや依存関係プロキシでは、GitLab の Workhorse 自身が 504 を返す処理もあります。 Workhorse は、GitLab の手前で要求を受ける中継の部品です。504 が出たという理由だけで、GitLab 本体の処理時間の上限を上げても、原因に対応した変更になるとは限りません。 エラーの概要 GitLab の Geo の公式資料には、大きなリポジトリの複製に失敗したときの例として、次の表示が載っています。 error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504 fatal: expected 'packfile' Geo は、GitLab のデータを複数の拠点に複製する機能です。この例では、手前の負荷分散装置や中継サーバーが接続を終了する状況が説明されています。packfile は Git が転送するデータをまとめたものです。 API や Web 画面では表示が異なる場合があります。504 という番号や画面の見た目だけでは、どこが時間切れになったかは確定できません。 まず最初に:操作と応答元を確認する 失敗した時刻、URL、操作の種類、失敗までのおおよその時間を控えます。API の場合は、応答のヘッダーと本文も確認してください。次のコマンドは読み取り要求の例です。 curl -i "https://gitlab.example.com/api/v4/projects/1" URL とプロジェクト ID は実際の接続先へ置き換えます。非公開プロジェクトなどでは認証が必要です。この要求が成功しても、大きな clone やアップロードの経路まで正常だとは判断できません。 Self-Managed の管理者は、同じ時刻の負荷分散装置、中継サーバー、Workhorse のログを照合します。本文やヘッダーは応答元を調べる手がかりですが、それだけで確定せず、実際に 504 を記録した部品を確認してください。 よくある原因と解決手順 大きな clone の途中で負荷分散装置が時間切れになる GitLab の Geo の資料は、Gitaly が転送用の packfile を準備している間にデータが流れず、手前の負荷分散装置が接続を終了する例を挙げています。Gitaly は Git リポジトリへのアクセスを扱う部品です。 ...