原因
HTTP サーバー接続が自動的に切断される原因としては、以下の点が考えられます。
Keep-Alive モードが設定されていない。
HTTP サーバーが一定時間アイドル状態のままである。
読み取り/書き込み操作においてタイムアウトまたはエラーが発生した。
解決方法
Function Compute は、Keep-Alive モードを使用することで、カスタムコンテナ実行中の HTTP サーバーとの接続を確保します。GET、HEAD、OPTIONS、TRACE リクエストなどの冪等性リクエストに対しては、EOF や connection reset by peer などのエラーが発生した場合、システムが HTTP サーバーへの再接続を試みます。一方で、POST や PATCH リクエストなどの非冪等性リクエストに対しては、接続失敗すると 502 エラーが返されます。502 エラーを防ぐには、カスタムコンテナが実行されているサーバーで、以下の設定が必要となります。
接続モードを Keep-Alive に設定する。
HTTP サーバーのアイドルタイムアウト機能を無効にするか、アイドルタイムアウト期間を 15 分以上に設定する。
HTTP サーバーフレームワークが異なると、上記の設定も異なります。たとえば、GoFrame フレームワークの場合は、SetIdletimeout、ReadTimeout、python uvicorn のパラメーターを設定する必要があります。具体的には、SetIdletimeout を 0 に設定し、python uvicorn のコマンドラインで --timeout-keep-alive パラメーターを設定する必要があります。また、Keep-Alive モード下での HTTP クライアントが疎な呼び出しを行う際に、HTTP サーバーは接続が切断されないかも確認必要です。
原因
関数自体の要因によるプロセス終了の理由は以下の通りです。
exitAPI が呼び出された。関数の実行中に発生した
exceptionメッセージが捕捉されなかった。
解決方法
問題を解決するには、下記のことを実行してください。
コード内に意図的なプロセス終了ロジックが含まれているか確認する。
exceptionが発生したときでもプロセスが終了しないように、実行環境の最上位プロセスで異常捕捉または上書きメカニズムを追加する。