本文介紹報錯Invocation canceled by client的原因和解決方案。
問題現象
在請求日誌中查到報錯資訊如下所示。
FC Invoke End RequestId: 1-64263a4b-2cd7c98b677*********, Error: Invocation canceled by client (duration: 4912ms, maxMemoryUsage: 0.00MB)
可能原因
發起調用的用戶端主動取消了請求,導致函數執行異常中斷,函數執行報錯。
解決方案
排查步驟如下所示。
根據報錯日誌,確認用戶端主動取消請求時,函數已執行的時間。
本文樣本中,
duration: 4912ms
表示函數運行接近5s。根據業務情況判斷該已耗用時間是否符合預期。
如果符合預期,則需要增加用戶端逾時時間。具體操作,請參見函數執行時間符合預期。
如果不符合預期,則需要根據日誌排查函數的運行鏈路,確認具體是哪部分邏輯導致執行時間增加。具體操作,請參見函數執行時間不符合預期。
函數執行時間符合預期
如果您通過SDK/API調用函數,建議將請求的逾時時間設定為大於函數配置的逾時時間。
例如,使用Golang語言和Function Compute的API調用函數,可以通過http.Client中的Timeout屬性佈建要求逾時時間。如果在發起請求時使用了context.Context,可以調整Context的截止時間或逾時時間。
如果您通過其他服務調用函數,可以在該服務的控制台修改後端逾時時間。
例如,前端通過API Gateway調用函數,可以在API Gateway控制台修改API的後端逾時配置。具體操作,請參見建立 API。
如果您通過控制台調用函數,請勿在函數未執行完成前單擊取消請求手動取消或關閉網頁。
函數執行時間不符合預期
程式執行的耗時一般包括以下兩類。
I/O操作
I/O操作,尤其網路的I/O,是執行延時增大的主要原因。建議排查程式中所有訪問外部服務的操作,可以在訪問外部服務前後添加日誌,確認耗時是否正常。
計算操作
大量的計算操作也可能導致延時增加,建議調大CPU規格。