トラブルシューティング / 関数実行が応答しない
関数の実行が応答しない場合、考えられる原因は複数あり、状況に応じて切り分ける必要があります。
具体的には、以下のような症状が現れます:
- ブラウザで API にアクセスする際、長時間ローディング状態が続く
- curl で API を呼び出す際、長時間何の応答もない
この場合、DataFlux Func にテスト関数を作成し、「関数 API」として設定して、原因を切り分ける必要があります。
テスト関数は以下のとおりです:
| Python | |
|---|---|
1 2 3 | |
1. テスト関数が正常な場合
考えられる原因と解決策:
| 考えられる原因 | 解決策 |
|---|---|
| 呼び出した関数が確かに長時間の実行を必要とする | 関数開発者に連絡して問題を調査する |
2. テスト関数を公開できない、またはテスト関数の呼び出しが応答しない
考えられる原因と解決策:
| 考えられる原因 | 解決策 |
|---|---|
| キューにブロッキングが発生している | 「情報 / システムレポートの取得 / 作業キューのクリア」へ移動する |
| Redis 接続に問題がある | Redis 接続の設定が正しいか確認し、DataFlux Func 全体を再起動する |
「Redis 接続に問題がある」について
k8s に DataFlux Func をデプロイしている環境では、k8s クラスターのクラッシュ再起動や Redis Pod のクラッシュ再起動が発生したものの、DataFlux Func 自体は再起動されていない場合、すべての関数呼び出しが応答しない可能性があります。
これは、k8s クラスターまたは Redis Pod の再起動後に、DataFlux Func と Redis の古い接続が閉じられていないか、DataFlux Func が Redis 接続の切断を認識できないため、DataFlux Func のタスクプロセスが常に Redis からのメッセージを待ち続け、正常に通信できない状態が続くことが原因と考えられます。
この場合、Redis が正常に稼働していることを確認した上で、DataFlux Func 全体を再起動すれば、この問題を解決できます。