Wie behebe ich Probleme beim Kaltstart von Lambda-Funktionen?

Lesedauer: 4 Minute
0

Bei meiner AWS Lambda-Funktion kommt es zu einer hohen Latenz beim Kaltstart.

Lösung

Um die Kaltstartzeit und die Latenzzeit Ihrer Lambda-Funktion zu minimieren, befolgen Sie diese Anweisungen für Ihren Anwendungsfall. Um die Kaltstartzeit und die Latenzzeit Ihrer Lambda-Funktion zu minimieren, beachten Sie diese Anweisungen für Ihren Anwendungsfall.

Beste Praktiken für Lambda-Funktionscode und Konfiguration

  • Erhöhen Sie den der Lambda-Funktion zugewiesenen Speicher. Der Kaltstart-Bereich richtet sich nach der Größe Ihrer Funktion, der Menge des zugewiesenen Speichers und der Komplexität Ihres Codes. Wenn Sie mehr Arbeitsspeicher hinzufügen, steigt die CPU-Anzahl proportional an, wodurch sich die verfügbare Rechenleistung insgesamt erhöht. Weitere Informationen finden Sie unter Arbeitsspeicher und Rechenleistung.
  • Reduzieren Sie die Größe Ihres Bereitstellungspakets auf ein Minimum. Je kleiner Ihr Bereitstellungspaket ist, desto schneller startet Ihre Funktion. Reduzieren Sie die Anzahl der Abhängigkeiten und externen Bibliotheken, die diese Funktion importiert, auf ein Minimum, und halten Sie die Größe des Bereitstellungspakets unter 50 MB. Weitere Informationen finden Sie unter Lambda-Bereitstellungspakete.
  • Optimieren Sie den Code Ihrer Lambda-Funktion, um die Initialisierungszeit zu minimieren. Reduzieren Sie die Anzahl der Abhängigkeiten und der externen Bibliotheken, die Ihre Funktion importiert. Reduzieren Sie die Menge des während der Initialisierung ausgeführten Codes.
  • Vermeiden Sie beim Start komplexe Berechnungen. Falls Ihre Funktion beim Start komplexe Berechnungen erfordert, wie z. B. das Laden großer Datensätze, können Sie dies im Hintergrund durchführen. Starten Sie die Berechnungen in einem Hintergrund-Thread während der Init-Phase. Danach können Sie die Ergebnisse für nachfolgende Aufrufe zwischenspeichern. Das Zwischenspeichern der Ergebnisse trägt dazu bei, die Zeit für komplexe Berechnungen beim Starten zu verkürzen.
  • Benutzen Sie Amazon Relational Database Service (Amazon RDS)-Datenbankverbindungen wieder. Wenn Ihre Funktion eine Verbindung zu einer Amazon RDS-Datenbank herstellt, erstellen Sie einen Amazon RDS-Proxy-Datenbank-Proxy für Ihre Funktion. Ein Datenbank-Proxy verwaltet einen Pool von Datenbankverbindungen. Die Wiederverwendung von Amazon RDS-Datenbankverbindungen, reduziert den Zeitaufwand für den Verbindungsaufbau bei jedem Aufruf Ihrer Funktion.
  • Konfigurieren Sie die bereitgestellte Parallelität. Bei Funktionen, die provisionierte Gleichzeitigkeit verwenden, tritt kein Kaltstartverhalten auf, weil die Ausführungsumgebung vor dem Aufrufen vorbereitet wird. Sie können die Anzahl der Funktionsinstanzen angeben, um den Datenverkehr zu halten und zu verwalten.
  • Die Komplexität deiner Abhängigkeiten reduzieren. Verwenden Sie einfache Frameworks, die beim Start der Ausführungsumgebung schnell geladen werden.
  • Um die Zeit zu verkürzen, in der Lambda in Java erstellte Bereitstellungspakete entpackt, legen Sie die .jar Dateien Ihrer Abhängigkeiten in einem separaten Verzeichnis /lib ab. Trennung der .jar-Dateien ist schneller, als den gesamten Code Ihrer Funktion in ein einzelnes Jar mit einer großen Anzahl von .class-Dateien zu packen. Weitere Informationen finden Sie unter Bereitstellen von Java Lambda-Funktionen mit ZIP- oder JAR-Dateiarchiven.
  • Nutzen Sie die Überwachung, um Probleme zu entdecken, und die Beobachtung, um herauszufinden, warum. Überwachen Sie das Kaltstartverhalten Ihrer Funktionen, und verwenden Sie Lambda Insights in Amazon CloudWatch, um Leistungsprobleme zu beheben.

Weitere Informationen finden Sie unter Bewährte Methoden für die Arbeit mit Lambda-Funktionen.

Lange INIT-Dauer bei bereitgestellter Parallelität

Bei bedarfsgesteuerten Lambdafunktionen wird die statische Initialisierung ausgeführt, sobald eine Anforderung eingegangen ist, aber bevor der Handler aufgerufen wird. Dies verursacht eine Latenzzeit für den Anforderer und trägt zur Gesamtdauer des Kaltstarts bei.

  • Prüfen Sie, ob die Gleichzeitigkeit Ihrer Funktion das konfigurierte Level der bereitgestellten Gleichzeitigkeit überschreitet. Sie können überprüfen, wie oft Ihre Funktion aufgerufen wird, indem Sie die CloudWatch-Metrik ProvisionedConcurrencySpilloverInvocations verwenden. Ein von Null-Wert zeigt an, dass die gesamte bereitgestellte Gleichzeitigkeit genutzt wird und bei einem Kaltstart einige Aufrufe erfolgten.
  • Prüfen Sie Ihre Aufrufhäufigkeit (Anforderungen pro Sekunde). Für Funktionen mit bereitgestellter Gleichzeitigkeit gilt eine maximale Rate von 10 Anforderungen pro Sekunde pro bereitgestellter Gleichzeitigkeit (Lambda-API-Anforderungen). Beispielsweise kann eine Funktion, die mit 100 bereitgestellten Gleichzeitigkeiten konfiguriert ist, 1000 Anfragen pro Sekunde verarbeiten. Übersteigt die Aufrufrate 1000 Anforderungen pro Sekunde, kann es zu Kaltstarts kommen. Weitere Informationen finden Sie unter Lambda: Kaltstarts mit der bereitgestellten Parallelität.

Weitere Informationen finden Sie unter Wie behebe ich Probleme mit der Parallelität von Lambda-Funktionen?

In Lambda integrierte Amazon API Gateway-Anfragen

Falls Sie Lambda mit API Gateway verwenden und eine hohe IntegrationLatency-Metrik sehen, überprüfen Sie die CloudWatch-Protokolle Ihrer Lambda-Funktion. Hohe Latenzzeiten müssen behoben werden, wenn ein mit einer Lambda-Funktion integrierter API-Endpunkt zu lange braucht, um Antworten an einen Client zu senden. Kaltstarts in Lambda-Funktionen werden in der Dauer-Metrik der Funktion nicht aufgezeichnet, so dass die Integrationslatenz Ihrer API länger sein kann als die Dauer der Funktion. Um die Dauer Ihrer Funktion bei einem Kaltstart zu sehen, verwenden Sie AWS X-Ray.

Weitere Informationen sind unter Wie behebe ich hohe Latenzzeiten in meinen mit Lambda integrierten API-Gateway-Anforderungen?

Weitere Informationen

Wie kann ich die Latenzzeit bei der Initialisierung und der Aufrufdauer meiner Java Lambda-Funktion verringern?

Verbesserung der Startup-Leistung mit Lambda SnapStart für Java 11 Runtime

Betrieb von Lambda: Leistungsoptimierung — Teil 1

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr