可能原因
HTTP Server串連主動關閉,主動關閉的可能原因如下:
- 串連未設定Keep-Alive。
- 空閑一段時間後,主動關閉。
- 讀寫逾時或錯誤時關閉。
解決方案
當前的Function Compute使用Keep-Alive連續訪問Custom Container內的HTTP Server,對於等冪請求例如GET、HEAD、OPTIONS或TRACE等,在串連失敗時例如
EOF
和connection reset by peer
等,會主動重試。但對於非等冪請求例如POST、PATCH等,在串連失敗時會直接返回502報錯。為避免502報錯,Custom Container的服務端需要設定以下兩類參數:- 將串連模式Connection設定為Keep-Alive。
- 關閉IDLE逾時時間或將IDLE逾時時間設定為15分鐘以上。
對於不同的HTTP Server架構以上兩種參數的配置方式可能會不一樣,例如GoFrame架構,不僅需要將SetIdletimeout
設定為0,還需要設定ReadTimeout
和python uvicorn
參數,python uvicorn
還需要在命令列中設定--timeout-keep-alive
等參數。建議您自行驗證,對於Keep-Alive模式的HTTP用戶端在進行稀疏性調用時,是否會觸發HTTP server主動關閉串連。
可能原因
函數本身原因導致進程退出,可能原因如下:
- 主動調用
exit
等介面退出。 - 運行過程中出現的
exception
未被捕獲。
解決方案
您可以按照以下方式檢查您的代碼:
- 檢查您的代碼中是否存在主動退出的邏輯。
- 在運行環境進程頂層增加異常捕獲或覆蓋,避免發生
exception
時進程退出。