H12 エラーへの対処 (リクエストタイムアウト)
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年04月27日(木)
この記事には、アプリでの H12 リクエストタイムアウトエラーの数の突然の増加に対処するための手順が含まれています。これらのエラーは、HTTP リクエストの完了に 30 秒以上かかる場合に発生します。多くの場合、次の原因で発生します。
- 高コストなクエリや低速の外部 API 呼び出しなど、実行に時間のかかるリクエスト。
- 結果としてトラフィックの急増時にリクエストキュー時間が長くなる、不十分な並列性。
長期的な対策については、H12 エラーの防止 (リクエストタイムアウト)を参照してください。
多数の H12 エラーの修正
各修復手順を次の順序で実行します。H12 エラーを減らすために、各手順を完了する必要がない場合があります。各手順の後に Heroku Dashboard をチェックして、エラーの数が減少したかどうかを確認してください。
dyno を再起動する
再起動すると、実行に時間のかかるリクエストがキャンセルされます。新しく起動した dyno は、実行に時間のかかるリクエストからの干渉なしにリクエストを受信するため、再起動すると H12 の問題を解決できます。
Heroku CLI を使用して、heroku ps:restart web
を実行し、すべての Web dyno を再起動します。または、Heroku Dashboard を使用して、[More] (その他) をクリックし、すべての dyno を再起動します。
ロールバック
H12 エラーの急増が特定のデプロイと同時に発生する場合は、コードの変更により実行に時間のかかるリクエストが発生した可能性があります。
Heroku CLI を使用して、heroku rollback
を実行して最新のリリースにロールバックします。
または、Heroku Dashboard の [Activity] (アクティビティ) タブで、最新のリリースの横にある [Roll back to here] (ここにロールバック) をクリックします。
増加したトラフィックを処理するために dyno をスケーリングする
dyno を再起動しても、トラフィックの急増によって引き起こされる問題には役立ちません。ただし、dyno を追加またはアップグレードすると、スループットの向上に対処するためのリソースが増えます。
Heroku Dashboard または付属の監視アドオン (該当する場合) でスループットを確認してください。スループットの詳細は、指標の記事を参照してください。
dyno を追加する
dyno プールが大きいほど、スループットの向上に対処するためのプロセスが増え、リクエストのキューイング時間が短くなるにつれてタイムアウトが減少します。
Heroku Dashboard または CLI を通じて dyno を追加します。詳細な手順は、スケーリングを参照してください。
dyno をアップグレードする
アプリケーションの dyno は、並列性の設定のためには小さすぎる場合があります。dyno を上位層にアップグレードすると、プロセスが使用するコンピューティングリソースが増えます。
Heroku Dashboard を確認してください。次のいずれかが当てはまる場合は、dyno をアップグレードしてください。
- dyno のメモリ使用率が 100% に近いかそれ以上である。
- dyno の負荷が、dyno タイプの許容負荷に近いかそれを上回っている。
次のステップ
この記事の修復手順は、即時の H12 エラーに対処するのに役立ちます。将来これらのエラーを最小限に抑えるために、アプリケーション内の実行の遅いコードや容量の問題に対処することが重要です。将来の対策のためのヒントについては、H12 エラーの防止 (リクエストタイムアウト)を確認してください。