このエラーは、Cloudflare Worker が CPU 時間の制限またはメモリ制限を超えたことを示します。
Cloudflare Worker が CPU 時間の制限 を超えています。CPU 時間は、コードの実行にかかった時間です(ループ、JSON の解析など)。ネットワークリクエスト(取得、応答)にかかった時間は、CPU 時間に含まれません。
CPU 負荷の高いコードを特定するには:
- ローカルで DevTools の CPU プロファイリング を使い、負荷の高い処理を特定します。
- Workers Logs を確認します。CPU 時間は invocation ログに表示されます。特定のルートやリクエストが CPU 時間を多く使っていないかを調べられます。
Workers コードの開発者に連絡し、CPU 使用量を減らすようコードを最適化してもらいます。よくある最適化の方針は次のとおりです。
- ループの反復回数を減らす
- JSON の解析処理を最適化する
- 計算済みの値をキャッシュする
- 大きな処理を小さな単位に分割する
Workers Paid プランでは、CPU 負荷の高いタスク向けに CPU 時間の制限を延長 し、最大 5 分まで設定できます。
Cloudflare Worker が 128 MB のメモリ制限 を超えています。これは isolate ごとの制限であり、1 つの isolate が複数のリクエストを同時に処理していることがあります。
メモリの問題を特定するには:
- ローカルで DevTools のメモリプロファイリング を使い、メモリスナップショットを取得してリークを特定します。
- 大きくなりうるボディ(リクエストまたはレスポンス)のバッファ、グローバルスコープに保持した大きなオブジェクト、配列へのデータの蓄積といったパターンを探します。
メモリ制限を超えないようにするには:
- 大きなオブジェクトやレスポンスをメモリにバッファしない
TransformStreamやnode:streamなどのストリーミング API を使い、バッファせずにデータを処理する- グローバルスコープに大きなオブジェクトを置かない
- データを蓄積する処理に注意する(文字列や配列への繰り返しの追加など)