Skip to content

トラブルシューティング: Workerのジョブがタイムアウトする

症状

長時間の音声ファイル(1〜3時間規模のASMR音声など)のアップロード後、uploads.statustranscodingのまま進まない、またはWorkerのログに変換途中でのコンテキストキャンセルが記録される。

原因

River(backend/cmd/workerが使うジョブキュー)は、ジョブの実行時間がJobTimeoutを超えるとジョブのcontextを自動的にキャンセルする。デフォルト値は1分(river.JobTimeoutDefault)で、ffmpegによる長尺音声の変換には短すぎる。

対応

backend/cmd/worker/main.goriver.ConfigJobTimeout: 10 * time.Minuteを明示的に設定済み(デフォルトの暗黙の1分に依存しないようにしてある)。想定より長い音声(10分の変換時間内に収まらないほど長時間、あるいは変換処理自体が重い)を扱う場合は、この値をさらに伸ばす必要がある。

JobTimeoutを超えてもジョブはRiverの再試行対象になるが、変換処理自体は最初からやり直しになる(部分的な続きからの再開はできない)ため、際限なく伸ばすのではなく実際に想定する最大音声長に対して余裕を持たせる程度にとどめること。