跳至內容

如何對 Lambda 函式「超過速率」和「TooManyRequestsException」限流錯誤進行疑難排解?

1 分的閱讀內容
0

我的 AWS Lambda 函式傳回「超過速率」和「TooManyRequestsException」限流錯誤。

解決方法

確認哪些資源受到限流

限流錯誤可能不是由您的 Lambda 函式所引起的。在函式調用過程中,API 呼叫可能會發生限流。

若要確認哪些資源受到限流,請檢查您的 Amazon CloudWatch Logs 和指標是否有限流錯誤。如果沒有 Lambda 限流指標,則表示限流是發生在 Lambda 函式程式碼中的 API 呼叫上。

檢查您的函式日誌和程式碼是否有任何限流的 API 呼叫

如果 API 呼叫受到限流,請確認您在程式碼中使用指數退避來重試 API 呼叫。

**注意:**如果您需要更高的每秒交易數 (TPS) 配額來進行 API 呼叫,則請求增加服務配額。並非所有配額都可調整。

檢查您的功能並行 CloudWatch 指標

檢查發生限流的 AWS 區域中,函式的 ConcurrentExecutions 指標。

檢視 ConcurrentExecutions上限統計資料限流總和統計資料。確認 ConcurrentExecutions 上限是否接近您在該區域中的帳戶層級並行數量配額,以及限流圖表中的相關資料點。

檢查並行配額

檢查您是否超過了函式所在區域的並行擴展率。您的並行擴充率為每 10 秒 1,000 個執行環境執行個體。如需詳細資訊,請參閱 Lambda 擴充行為

在 CloudWatch 主控台中 Lambda 的指標頁面上,將圖表的時間範圍縮短為 1 分鐘。的限制,則會在圖表上看到與 ConcurrentExecutions 階梯模式對應的限流激增。

若要避免爆量並行限制,您可以設定佈建並行。您也可以請求增加 Lambda 函式的並行限制

檢查函式的持續時間指標是否有峰值

並行取決於函式持續時間。如果您的函式程式碼需要很長時間才能完成,那可能是因為運算資源不足。

檢閱執行日誌中的記憶體使用量上限欄位,並將該值與函式設定的記憶體設定進行比較。如果記憶體使用量上限接近設定的記憶體,表示您的函式通常受記憶體限制。如需詳細資訊,請參閱確定 Lambda 函式的適當記憶體設定

設定預留並行

確認您已為函式設定了預留並行。預留並行為函式設定了並行邊界,並且還可以保護函式免受其他可能消耗未預留並行的函式影響。雖然預留並行可以減少函式限流,但它也可能無意中對函式進行限流。

使用 Lambda 主控台 檢查預留並行的設定。如果未設定預留並行,則函式會使用未預留並行。當對函式的調用超過未預留並行時,會發生限流。

**注意:**如果您將函式設定為零預留並行,則該函式會因無法處理任何事件而受到限流。請務必將該值增加為大於零的數字。

若要設定或增加預留並行,請參閱設定函式的預留並行。若要對預留並行問題進行疑難排解,請參閱如何對 Lambda 預留並行問題進行疑難排解?

使用指數退避

若要避免限流錯誤,請在進行 API 呼叫時使用指數退避並重試。最佳做法是在應用程式中對 Lambda 函數發出 API 呼叫時,採用指數退避。

如需詳細資訊,請參閱指數退避和抖動重試行為。確認將您的 API 呼叫分散在一段時間中執行。使用隨機化排定動作,使其分散在一段時間中執行。

使用無效字母佇列

對於非同步事件來源 (例如 Amazon Simple Storage Service (Amazon S3)Amazon EventBridge 排程器),請使用無效字母佇列設定函式。然後,驗證非同步調用組態的錯誤處理。死字母佇列會攔截因持續遭到限流而捨棄的事件,從而保護您的資料。

**注意:**對於 Amazon Simple Queue Service (Amazon SQS) 事件來源,您必須在 Amazon SQS 佇列上設定無效字母佇列。

請求增加服務配額

如果您的工作負載需要更高的並行執行服務配額,則請求增加服務配額

相關資訊

使用 Lambda 函式的最佳做法

對 Lambda 中的調用問題進行疑難排解

了解 Lambda 中的重試行為

AWS 官方已更新 7 個月前