如何疑難排解 Lambda 函數冷啟動問題?

1 分的閱讀內容
0

我的 AWS Lambda 函數出現高延遲的冷啟動持續時間。

解決方案

針對 Lambda 函數對環境和程式碼之請求的初始設定稱為冷啟動時間或啟動延遲。若要有效縮短 Lambda 函數的冷啟動時間和延遲,請依照您的使用案例,遵循這些說明進行。

Lambda 函數程式碼和組態最佳實務

  • 增加分配給 Lambda 函數的記憶體。冷啟動範圍取決於函數的大小、配置的記憶體數量以及程式碼的複雜性。增加更多記憶體會按比例增加 CPU 的數量,從而提高可用的整體運算效能。如需詳細資訊,請參閱記憶體和運算效能
  • 將部署套件的大小降至最低。部署套件越小,函數啟動的速度就越快。將函數匯入的相依性與外部程式庫數量降至最低,並將部署套件大小保持在 50 MB 以下。如需詳細資訊,請參閱 Lambda 部署套件
  • 最佳化 Lambda 函數程式碼,以縮短初始化所需的時間。減少函數匯入的相依性與外部程式庫的數量。減少初始化期間執行的程式碼量。
  • 在啟動時避免複雜的運算。如果您的函數在啟動時需要執行複雜的運算,例如載入大型資料集,則可以在背景執行此作業。初始化階段期間在背景執行緒中執行運算。然後,快取後續調用的結果。快取結果有助於縮減啟動時進行複雜運算所需的時間。
  • 重複使用 Amazon Relational Database Service (Amazon RDS) 資料庫連線。如果您的函數連線到 Amazon RDS 資料庫,您可以為您的函數建立 Amazon RDS Proxy 資料庫代理。資料庫代理會管理資料庫連線的集區。重複使用 Amazon RDS 資料庫連線可縮短每次調用函數時建立連線的時間。
  • 設定佈建的並行。使用佈建並行的函數不會出現冷啟動行為,因為執行環境在調用之前便已準備就緒。您可以指定要保持暖狀態的函數執行個體數量,並管理流量。
  • 將相依性的複雜性降至最低。使用可在執行環境啟動時快速載入的簡單架構。
  • 若要縮短 Lambda 解壓縮以 Java 編寫的部署套件所需的時間,請將相依性** .jar** 檔案放在個別的** /lib** 目錄中。將 .jar 檔案分離,比將所有函數的代碼都放在包含大量** .class** 檔案的單一 jar 中更快。如需詳細資訊,請參閱使用 .zip 或 JAR 檔案封存檔部署 Java Lambda 函數
  • 使用監控來發現問題,以及使用可觀察性來發現原因。監控函數的冷啟動效能,並使用 Amazon CloudWatch 中的 Lambda 洞察來疑難排解效能問題。

如需詳細資訊,請參閱使用 Lambda 函數的最佳實務

在佈建的並行中,INIT 的持續時間較長

在隨需 Lambda 函數中,靜態初始設定式會在收到請求之後,但在調用處理常式之前執行。這會導致請求者延遲,並延長整體冷啟動持續時間。

  • 判斷您的函數並行是否超過佈建並行的設定層級。您可以使用 ProvisionedConcurrencySpilloverInvocations CloudWatch 指標來檢查調用函數的次數。非零值表示所有佈建的並行處於使用中,且冷啟動時發生了某些調用。
  • 檢查您的調用頻率 (每秒請求數)。具有佈建並行之函數的最高速率為每個佈建並行每秒 10 個請求 (Lambda API 請求)。例如,使用 100 個佈建並行所設定的函數,每秒可處理 1000 個請求。如果調用速率超過每秒 1000 個請求,則可能會發生一些冷啟動。如需詳細資訊,請參閱 Lambda: 具有佈建並行的冷啟動

如需詳細資訊,請參閱如何疑難排解 Lambda 函數佈建並行問題?

與 Lambda 整合的 Amazon API Gateway 請求

如果您將 Lambda 與 API Gateway 搭配使用,而且看到高 IntegrationLatency 指標,請檢閱 Lambda 函數的 CloudWatch Logs。如果與 Lambda 函數整合的 API 端點傳送回應給用戶端所需的時間太長,則必須解決高延遲問題。Lambda 函數的冷啟動不會記錄在函數的持續時間指標中,因此 API 的整合延遲可能會超過函數的持續時間。若要檢視具有冷啟動的函數的持續時間,請使用 AWS X-Ray

如需詳細資訊,請參閱如何疑難排解與 Lambda 整合的 API Gateway 請求中的高延遲?

相關資訊

如何減少 Java Lambda 函數的初始化和調用持續時間延遲?

使用 Lambda SnapStart for Java 11 Runtime 提升啟動效能

操作 Lambda: 效能最佳化 – 第 1 部分

AWS 官方
AWS 官方已更新 1 年前
沒有評論