Skip to main content

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

HTTP 504: アプリケーションへのアクセス時のゲートウェイタイムアウトエラー

症状

OutSystems Cloudインフラの環境を使用しているとき、アプリケーションのリクエストが「HTTP 504: Gateway Timeout(HTTP 504: ゲートウェイタイムアウト)」で失敗した場合にService Centerのログにエラーメッセージが記録されません。
その後のアプリケーションへのリクエストは動作する場合も動作しない場合もありますが、その他のURLへのアクセスは期待どおりに動作します。

この問題が発生するのはProduction環境か、カスタムSSL証明書がインストールされているその他の環境です。

環境でOutSystemsプラットフォームのバージョン9.1(9.1.300.1以降)またはバージョン10(すべてのバージョン)を実行している場合です。

原因

ロードバランサレベルで定義されたタイムアウトよりもリクエストの処理に時間がかかり、接続が(504エラーにより)切断されています。リクエストは引き続きOutSystems Platform Serverで実行され、正常に終了する場合や、別の(異なる)エラーで終了する場合があります。

その他の情報

OutSystems Cloudインフラには、以下を対象とするロードバランサが用意されています。

  • Production環境。
  • ユーザーが用意したSSL証明書を使用するすべての非本番環境
    (OutSystemsプラットフォームバージョン9.1.301.0以降実行時)。

ロードバランサでは「アイドルタイムアウト」時間が60秒に構成されており、これがサーバーでリクエストを実行できる時間と異なっている場合があります。時間が過ぎると、ロードバランサによって接続が閉じられ、クライアントに504エラーが返されます。

作業中にこの問題が発生した場合はOutSystems Supportに連絡して、解決策のサポートを受けてください。

リクエストの処理に時間がかかる原因

リクエストの処理に時間がかかる場合、複数の原因が考えられます。

  • アプリケーションの最初の読み込み。504エラーが一度のみ表示されて繰り返し表示されない場合は、おそらく心配する必要はありません。特に非本番環境でのみ発生する場合は問題ありません。
  • アプリケーション内の最適化されていないルーチン。アプリケーションに低速なビジネスロジックや連携があり、パフォーマンスが変動する場合は、頻繁にこのエラーの影響を受けている可能性があります。これを解決する唯一の方法は、リクエストが高速に処理されるようにアプリケーションの構築を見直すことです。
  • 環境が負荷に対応できておらず、ハードウェアのダンプ/クラスのアップグレードが必要な場合があります。

実行中のリクエストに及ぼす影響

実際は、サーバーではなくロードバランサがタイムアウトの原因であるため、以下のようになります。

  • たとえば75秒で実行されるリクエストは、エンドユーザーから見ると60秒後に504エラーで「失敗」します。ただし、リクエストはサーバーで引き続き実行されます。このため、不適切な結果(「[Save]ボタンを押すとエラーになるにもかかわらず、情報は保存される」など)になります。
    ロードバランサが60秒でタイムアウトしない場合、リクエストは75秒で実行され、適切な結果がユーザーに示されます。
  • エンドユーザーがリクエストを繰り返した場合(ブラウザで更新操作を行った場合)、2つ目のリクエストはキューに追加され、最初のリクエストが終了するまで実行されません。これは、OutSystemsのリクエストではセッションへの排他的アクセスが必要なため、同一ユーザーからのリクエストを同時に実行することができないためです。
    更新操作を繰り返し使用するとキューが増えます。また、低速なリクエストの実行中にユーザーが別の(通常は高速な)画面にアクセスしようとすると、その(高速な)リクエストもキューで待機中になるため、「低速」になります。

    OutSystemsのセッションの動作の詳細については、こちらをご覧ください。

解決策

504ゲートウェイエラーを解決するには、エラーの影響を受けるリクエストの遅さを解決し、リクエストが「アイドルタイムアウト」より短い時間で処理されるようにする必要があります。

以下のような対応方法が考えられます。

  • 低速なアプリケーションロジックを見直し、速度を改善するか、低速な処理が非同期的に実行されるようにリファクタリングします。このとき、LifeTimeのパフォーマンスモニターが役立ちます。簡単なパターンに関するこちらの記事もご覧ください。
  • システム性能が限界に達していると考えられる場合は、サーバークラス(フロントエンドまたはデータベース)のアップグレードが必要な可能性があります。オプションの詳細については、オンラインヘルプをご覧ください。