全部產品
Search
文件中心

Function Compute:用戶端中斷連線,報錯Invocation canceled by client怎麼辦?

更新時間:Jul 06, 2024

本文介紹報錯Invocation canceled by client的原因和解決方案。

問題現象

在請求日誌中查到報錯資訊如下所示。

FC Invoke End RequestId: 1-64263a4b-2cd7c98b677*********, Error: Invocation canceled by client (duration: 4912ms, maxMemoryUsage: 0.00MB)

可能原因

發起調用的用戶端主動取消了請求,導致函數執行異常中斷,函數執行報錯。

解決方案

排查步驟如下所示。

  1. 根據報錯日誌,確認用戶端主動取消請求時,函數已執行的時間。

    本文樣本中,duration: 4912ms表示函數運行接近5s。

  2. 根據業務情況判斷該已耗用時間是否符合預期。

函數執行時間符合預期

  • 如果您通過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規格。