用語辞典・エラー・運用

500 Internal Server Error

500 Internal Server Errorとは

500 Internal Server Error(ファイブ・ハンドレッド・インターナル・サーバー・エラー)は、サーバー内部で予期しない問題が起き、要求を完了できなかったことを示すステータスです。

サーバーがより具体的な5xxを割り当てられない予期しない状態に使います。要求が妥当に見えても、アプリケーションコード、データ、依存先、設定の途中で処理を続けられません。

500は「インターネットが壊れた」コードでも「原因は必ずプログラム不具合」というコードでもありません。応答を生成したサーバー内部の処理の流れを観測して原因を特定します。

正しい要求がオリジンサーバー内部へ入り、予期しない条件で処理が中断するクライアントへ安全なエラー、運用者へ照合可能な詳細診断情報を分けて返す
正常な要求がサーバーの解析と認証を通過した後、コード、データベース、設定、依存先の障害へ分かれ、簡潔な応答と保護されたログへ情報を分離するピクトグラム図解
図1クライアントへ呼び出し履歴追跡情報を返さず、応答の相関トークンとサーバー側追跡情報・ログ・指標を結び付けます。

原因を内部構成要素へ分ける

アプリケーション未処理の例外・処理手順の欠陥

空値、型、境界値、想定外の状態などを追跡情報から調べます。

データベースクエリー・トランザクション・接続プール

スキーマの差、制約違反、接続枯渇、ロックを確認します。

設定環境差・秘密情報・権限

不足している値、ファイルへのアクセス、配備設定の差を調べます。

依存先外部サービスの失敗

上流エラーを500へまとめたのか、502・503・504が適切かを見直します。

調査の順序

  1. 発生範囲を定める全要求か、特定経路・利用組織・版・データだけかを指標で分けます。
  2. 関連付けIDを合わせる要求トークン、追跡情報、配備版、時刻をログ間で結びます。
  3. 最初の失敗を探す後続エラーの連鎖ではなく、最初の例外・タイムアウト・制約を特定します。
  4. 安全に緩和する切り戻し、機能切り替え設定、新規通信のドレイニング、代替処理で影響を縮めます。
  5. 再発条件を試験へ残す修正だけで終わらず、境界値と依存先失敗を自動試験へ加えます。

クライアントへ返す内容

利用者には操作が完了しなかったこと、再試行の可否、問い合わせ用トークンを示します。呼び出し履歴追跡情報、取得元パス、SQL、実行環境変数、秘密情報、個人データは返しません。

APIは一貫したエラーメディア種類と構造定義を使い、HTMLエラーページをJSONクライアントへ返さないようエッジサーバーとアプリケーションのエラー処理を揃えます。

無条件再試行を避ける

一時的依存先失敗なら再試行で回復する場合がありますが、プログラム不具合や不正状態へ同じPOSTを繰り返すと負荷・二重処理が増えます。冪等性、バックオフ、サーキットブレーカー、再試行予算を設計します。

500率だけでなく経路別遅延、例外種類、依存先ステータス、配備変更を監視し、警報を利用者影響へ結び付けます。

500はサーバー内部の予期しない状態で要求を完了できない汎用ステータスです。内部構成要素、最初の失敗、配備差を追跡情報で特定し、安全なエラー応答と保護された診断情報を分けます。

予期しない状態の定義:RFC 9110「500 Internal Server Error」

関連用語