このページでは、Dataflow のバッチジョブの処理速度が遅い場合や停止している場合の一般的な原因とそのトラブルシューティング方法について説明します。
バッチジョブの処理速度が遅い場合や停止している場合は、[実行の詳細] タブでジョブの詳細情報を確認し、ボトルネックの原因となっているステージやワーカーを特定します。
根本原因を特定する
ワーカーの起動時にジョブで問題が発生しているかどうかを確認します。詳細については、Pod の同期エラーをご覧ください。
ジョブがデータ処理を開始したことを確認するには、job-message ログで次のログエントリを探します。
All workers have finished the startup processes and began to receive work requests
ジョブのパフォーマンスを異なるジョブ間で比較するには、入力データの量、ワーカー構成、自動スケーリングの動作、Dataflow Shuffle の設定が同じであることを確認します。
割り当て上限、ストックアウトの問題、IP アドレスの枯渇などの問題がないか、job-message ログを確認します。
ジョブにストラグラーがないか確認します。詳細については、バッチジョブのストラグラーのトラブルシューティングをご覧ください。
スループット、CPU、メモリ使用率の指標を確認します。
ワーカーログで警告とエラーを確認します。
- ワーカーログにエラーが含まれている場合は、スタック トレースを表示します。エラーがコードのバグによって発生しているかどうかを調査します。
- Dataflow エラーを探します。Dataflow エラーのトラブルシューティングをご覧ください。
- パイプラインの停止の原因となるメモリ不足エラーを探します。メモリ不足エラーが表示された場合は、Dataflow のメモリ不足エラーのトラブルシューティングの手順に沿って対応します。
- 遅いステップまたは停止しているステップを特定するには、ワーカーログで
Operation ongoing
メッセージを確認します。スタック トレースを確認して、ステップで時間がかかっている場所を確認します。詳細については、処理が停止している、またはオペレーションが進行中であるをご覧ください。
Dataflow Shuffle を使用していない場合は、シャッフルログで、シャッフル オペレーション中の警告とエラーを確認します。ポート 12345 または 12346 で RPC タイムアウト エラーが発生した場合は、ジョブにファイアウォール ルールがない可能性があります。Dataflow のファイアウォール ルールをご覧ください。
Runner v2 が有効になっている場合は、harness ログでエラーを確認します。詳細については、Runner v2 のトラブルシューティングをご覧ください。
ストラグラーを特定する
ストラグラーは、ステージ内の他の作業アイテムと比較して低速な作業アイテムです。ストラグラーの特定と修正については、バッチジョブのストラグラーのトラブルシューティングをご覧ください。
遅延しているステージまたは停滞しているステージを特定する
遅延しているステージまたは停滞しているステージを特定するには、[ステージの進捗状況] ビューを使用します。バーが長いほど、ステージに時間がかかっていることを示します。このビューを使用して、パイプラインで最も遅いステージを特定します。
ボトルネックのステージが見つかったら、次の操作を行います。
- ステージ内で遅延しているワーカーを特定します。
- 遅延しているワーカーがない場合は、[ステージ情報] パネルで最も遅いステップを特定します。この情報を使用して、ユーザーコードの最適化が必要な場所を特定します。
- 並列処理のボトルネックを見つけるには、Dataflow モニタリング指標を使用します。
遅延しているワーカーを特定する
特定のステージで遅延しているワーカーを特定するには、[ワーカーの進捗状況] ビューを使用します。このビューでは、ステージが終了するまですべてのワーカーが作業中であるか、特定のワーカーが遅延タスクで行き詰っているかどうかを確認できます。遅延しているワーカーが見つかった場合は、次の操作を行います。
- ワーカーのログファイルを表示します。詳細については、パイプライン ログのモニタリングと表示をご覧ください。
- 遅延しているワーカーの CPU 使用率の指標とワーカーの進行状況の詳細を確認します。CPU 使用率が著しく高いか低い場合は、そのワーカーのログファイルで次の問題を探します。
デバッグツール
パイプラインが遅い場合や停滞している場合は、次のツールを使用して問題を診断できます。
- インシデントと関連付けてボトルネックを特定するには、Dataflow 用 Cloud Monitoring を使用します。
- パイプラインのパフォーマンスをモニタリングするには、Cloud Profiler を使用します。
- 変換の中には、他の変換よりも大容量のパイプラインに適しているものがあります。ログ メッセージを使用すると、バッチ パイプラインまたはストリーミング パイプラインで停止したユーザー変換を特定できます。
- 停止したジョブの詳細については、Dataflow ジョブの指標をご覧ください。有用な指標は次のとおりです。
- バックログのバイト数の指標(
backlog_bytes
)は、処理されていない入力量をステージごとにバイト単位で測定します。この指標を使用して、スループットのない融合されたステップを探します。同様に、バックログ要素の指標(backlog_elements
)は、ステージ内の未処理の入力要素の数を測定します。 - 並列処理キー(
processing_parallelism_keys
)指標は、直近 5 分間のパイプラインの特定のステージにおける並列処理キーの数を測定します。この指標を使用して、次のように調査します。- 問題を特定のステージに絞り込み、
A hot key ... was detected
などのホットキーの警告を確認します。 - 不十分な並列処理によるスループットのボトルネックを見つけます。これらのボトルネックにより、パイプラインの遅延や停止が発生する可能性があります。
- 問題を特定のステージに絞り込み、
- システムラグ指標(
system_lag
)とステージごとのシステムラグ指標(per_stage_system_lag
)は、データが処理された最大時間または処理を待機している最大時間を測定します。これらの指標を使用して、データソースから非効率的なステージとボトルネックを特定します。
- バックログのバイト数の指標(
Dataflow モニタリング ウェブ インターフェースに含まれていない追加の指標については、Google Cloud 指標で Dataflow 指標の完全なリストをご覧ください。