Wie behebe ich die Fehler „Out of memory“ in meiner Amplify-Build-Bereitstellung?
Wenn ich meinen AWS Amplify-Build bereitstelle, erhalte ich die Fehlermeldung „Out of memory“.
Kurzbeschreibung
Wenn du einen Build in der Amplify-Konsole bereitstellst, erstellt Amplify einen temporären Rechen-Container mit 4 virtuellen CPUs (vCPUs) und 8 GB RAM. Wenn dein Build mehr Arbeitsspeicher als die standardmäßigen 8 GB benötigt, wird möglicherweise einer der folgenden Fehler aufgrund unzureichenden Speichers angezeigt:
„JavaScript heap out of memory“
„FATAL ERROR: „Ineffective mark-compacts near heap limit Allocation failed“
„SIGKILL directive“
Der Speicherverbrauch variiert je nach Paketmanager, Build-Tools, Framework und der Gesamtkomplexität des Projekts.
Lösung
Identifiziere deine Speicheranforderungen
Gehe wie folgt vor, um die Speicherauslastung deiner Anwendung zu überprüfen und den Speicherverbrauch deines Builds zu messen:
- Öffne Windows Terminal oder PowerShell in deinem Projektverzeichnis.
- Um die maximale Speicherauslastung zu ermitteln, führe je nach Betriebssystem (OS) den folgenden Befehl aus.
Linux oder macOS:
Windows:/usr/bin/time -l npm run buildpath = (Get-Location).Path; job = Start-Job -ScriptBlock { Set-Location -Path Using:path; npm run build }; maxMemory = 0; while (job.State -eq 'Running') { currentMemory = (Get-Process -Name 'node' -ErrorAction SilentlyContinue | Measure-Object -Property WorkingSet64 -Sum).Sum; if (currentMemory -gt maxMemory) { maxMemory = currentMemory }; Start-Sleep -Seconds 1 }; Wait-Job job; Receive-Job job; Write-Host "Peak Memory Usage: ([math]::Round(maxMemory / 1MB, 2)) MB"; Remove-Job job
Gehe wie folgt vor, um mithilfe von Node.js Engpässe zu identifizieren und speicherintensive Vorgänge zu lokalisieren:
-
Öffne die Eingabeaufforderung in deinem Projektverzeichnis.
-
Führe den folgenden Befehl aus, um den Profiling-Befehl für dein Framework abzurufen:
React (CRA): node --prof node_modules/react-scripts/scripts/build.js Vite : node --prof node_modules/vite/bin/vite.js build Next.js : node --prof node_modules/next/dist/bin/next build Vue CLI : node --prof node_modules/@vue/cli-service/bin/vue-cli-service.js build -
Führe den folgenden Befehl aus, um den Analysebericht zu generieren:
node --prof-process isolate-0x*.log > profile_report.txt**Hinweis ** **: ** Der Analysebericht enthält zeitbezogene Informationen zu Funktionsaufrufen und Speicherzuweisungen für deinen Build. Verwende diese Informationen, um die Operationen zu identifizieren, die die meisten Ressourcen verbrauchen und die du optimieren kannst.
Aktualisiere deine Amplify-Konfiguration
**Hinweis:**Wenn du eine amplify.yml-Datei in deinem GitHub-Repository verwendest, musst du die Datei direkt im Repository aktualisieren, nicht in der Amplify-Konsole.
**Umgebungsvariablen für die Speicheroptimierung konfigurieren **
Um die Speichernutzung während des Build-Prozesses großer Anwendungen zu optimieren, füge deinem Build Umgebungsvariablen für die Speicheroptimierung hinzu. Bearbeite die Build-Spezifikationen und füge je nach Anwendungstyp die folgenden Umgebungsvariablen zum PreBuild-Abschnitt deiner YAML-Konfigurationsdatei hinzu:
- React-Anwendungen:
Hinweis: NODE_OPTIONS=--max-old-space-size=5632 erhöht das Heap-Speicherkontingent von Node.js auf 5,5 GB und verhindert Fehler aufgrund unzureichenden Speichers bei großen Builds. GENERATE_SOURCEMAP=false deaktiviert die Generierung der Quellzuordnungen und reduziert den Speicherverbrauch und die Erstellungszeit. INLINE_RUNTIME_CHUNK=false reduziert den Speicheraufwand beim Bündeln.frontend: phases: preBuild: commands: - npm install - export NODE_OPTIONS=--max-old-space-size=5632 - export GENERATE_SOURCEMAP=false - export INLINE_RUNTIME_CHUNK=false - Non-React-Anwendungen:
Hinweis: INLINE_RUNTIME_CHUNK=false reduziert den Speicheraufwand beim Bündeln. GENERATE_SOURCEMAP und INLINE_RUNTIME_CHUNK sind spezifisch für React-Anwendungen.frontend: phases: preBuild: commands: - npm install - export NODE_OPTIONS=--max-old-space-size=5632
Zwischenspeichern vorübergehend deaktivieren
Um den Speicherverbrauch während des Build-Erstellungsprozesses zu reduzieren, führe die folgenden Schritte aus, um das Caching vorübergehend zu deaktivieren:
-
Öffne die Amplify-Konsole.
-
Wähle deine Anwendung aus.
-
Wählen Hosting.
-
Wähle Einstellungen erstellen.
-
Wähle unter App-Build-Spezifikation die Option Bearbeiten aus.
-
Füge #-Hashes zum Abschnitt Cache hinzu. Beispielkonfiguration:
#cache: #paths: #- node_modules/**/* #- .next/cache/**/* #- .npm/**/* -
Wähle Speichern aus.
**Hinweis:**Wenn du das Caching deaktivierst, reduziert sich der Speicherverbrauch, aber die Build-Zeit nimmt zu. -
Entferne nach Abschluss des Builds die #-Hashes aus dem Abschnitt Cache, um das Caching erneut zu aktivieren. Beispielkonfiguration:
cache: paths: - node_modules/**/* - .next/cache/**/* - .npm/**/*
**Erhöhe die Größe deines Build-Containers **
Wenn deine Anwendung mehr als 8 GB RAM benötigt, führe die folgenden Schritte aus, um die Größe der Build-Instance zu erhöhen:
-
Öffne die Amplify-Konsole.
-
Wähle deine Anwendung aus.
-
Wählen Hosting.
-
Wähle Build-Einstellungen und dann Erweiterte Einstellungen aus.
-
Wähle Bearbeiten aus.
-
Wählen deinen Build-Instance-Typ aus.
-
Wähle Speichern aus.
-
Wähle unter App-Build-Spezifikation die Option Bearbeiten aus.
-
Aktualisiere den Parameter max-old-space-size basierend auf deinem Instance-Typ:
Groß (16 GiB):--max-old-space-size=14000Groß (32 GiB):
--max-old-space-size=28000 -
Wähle Speichern aus.
-
Wähle im Navigationsbereich Übersicht.
-
Wähle deinen Anwendungszweig aus.
-
Wähle deine neueste Bereitstellung aus, und wähle dann Diese Version erneut bereitstellen aus.
**Hinweis:**Reserviere 1 GB Arbeitsspeicher für Systemprozesse, um Build-Fehler zu vermeiden. Informationen zu den Preisen für Build-Instances findest du unter Preise für AWS Amplify.
- Themen
- Front-End Web & Mobile
- Tags
- AWS Amplify
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 8 Monaten
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 3 Jahren