Ένα κοινό πρόβλημα κατά την εργασία σε ένα έργο JavaScript Node.js είναι το σφάλμα "JavaScript heap of memory". Αυτό το σφάλμα παρουσιάζεται συνήθως όταν η προεπιλεγμένη μνήμη που εκχωρείται από το σύστημά σας στο Node.js δεν είναι αρκετή για την εκτέλεση ενός μεγάλου έργου.

Το σφάλμα είναι κοινό είτε εκτελείτε το έργο σας σε Windows, macOS ή διανομή Linux όπως το Ubuntu. Ευτυχώς, υπάρχουν μερικές εύκολες διορθώσεις που μπορούν να βοηθήσουν στην επίλυση του σφάλματος "JavaScript heap of memory".

Τι είναι η μνήμη Heap;

Πριν εξετάσετε τη διόρθωση του σφάλματος, είναι χρήσιμο να καταλάβετε τι είναι η μνήμη σωρού και πώς το χρησιμοποιούν τα προγράμματα.

Η μνήμη που εκχωρείται στο σωρό του συστήματος ονομάζεται επίσης δυναμικά εκχωρημένη μνήμη. Εναπόκειται στον προγραμματιστή να χρησιμοποιήσει τη διαθέσιμη μνήμη όπως νομίζει. Το πιο σημαντικό, το μέγεθος του σωρού για ένα πρόγραμμα εξαρτάται από τη διαθέσιμη εικονική μνήμη που έχει εκχωρηθεί σε αυτό.

Εάν εκτελείτε ένα σχετικά μεγάλο έργο, μπορεί να απαιτεί περισσότερη μνήμη από το προεπιλεγμένο κομμάτι που έχει εκχωρηθεί. Αυτό μπορεί να προκαλέσει διακοπή λειτουργίας του έργου σας και να καταγράψει το σφάλμα "JavaScript heap of memory".

Πώς να διορθώσετε τη μνήμη JavaScript Heap Out of Memory στα Windows

Ανεξάρτητα από το IDE σας, η επιδιόρθωση "JavaScript heap of memory" είναι πανομοιότυπη.

Μπορείς προσθέστε μια μεταβλητή περιβάλλοντος μέσω του Πίνακα Ελέγχου για να αυξήσετε τη μνήμη που εκχωρείται σε ένα έργο Node.js.

  1. Ανοιξε το Αρχικο ΜΕΝΟΥ, ψάχνω για Προηγμένες ρυθμίσεις συστήματοςκαι επιλέξτε την καλύτερη αντιστοίχιση.
  2. Από το παράθυρο διαλόγου, κάντε κλικ στο Μεταβλητές Περιβάλλοντος, μετά κάντε κλικ στο Νέος από οποιοδήποτε Μεταβλητές συστήματος ή Μεταβλητές χρήστη. Το πρώτο ισχύει για όλους τους χρήστες του υπολογιστή σας, ενώ το δεύτερο επηρεάζει μόνο τον τρέχοντα λογαριασμό σας
  3. Στο Όνομα μεταβλητής πεδίο εισαγωγής NODE_OPTIONS. Στο Μεταβλητή τιμή πεδίο εισαγωγής --max-old-space-size=4096. Αυτή η τιμή θα εκχωρήσει 4 GB εικονικής μνήμης στο Node.js. Για να ορίσετε μια διαφορετική τιμή, πολλαπλασιάστε το ποσό που χρειάζεστε σε GB επί 1024 (η τιμή της μεταβλητής πρέπει να είναι σε MB).
  4. Κάντε κλικ στο Εντάξει για να αποθηκεύσετε τις αλλαγές σας και, στη συνέχεια, κάντε κλικ Ισχύουν και τέλος κάντε κλικ Εντάξει άλλη μια φορά. Επανεκκινήστε το έργο σας για να τεθούν σε ισχύ οι αλλαγές.

Μπορείτε επίσης να ορίσετε μια μεταβλητή περιβάλλοντος μέσω ενός τερματικού Windows PowerShell.

Εκκινήστε ένα τερματικό PowerShell, πληκτρολογήστε την παρακάτω εντολή και πατήστε Enter:

$env: NODE_OPTIONS="--max-old-space-size=4096"

Εάν θέλετε να αυξήσετε μόνο προσωρινά τη μνήμη σωρού, εκτελέστε την παρακάτω εντολή σε ένα τερματικό PowerShell πριν εκτελέσετε το έργο σας:

σειρά NODE_OPTIONS=--max-old-space-size=4096

Αφού εισαγάγετε αυτήν την εντολή, μπορείτε να αναπτύξετε/εκτελέσετε το έργο σας χρησιμοποιώντας npm εκτέλεση dev ή το δικό σας σενάριο.

Να θυμάστε πάντα να εισάγετε το απαιτούμενο μέγεθος μνήμης σε MB. Εάν δεν το κάνετε αυτό, μπορεί να προκληθεί απροσδόκητη συμπεριφορά στο πρόγραμμά σας. Είναι επίσης ζωτικής σημασίας να μην εκχωρήσετε ολόκληρη τη διαθέσιμη μνήμη σας, καθώς αυτό μπορεί να προκαλέσει σημαντική αποτυχία του συστήματος.

Πώς να διορθώσετε το σφάλμα JavaScript Heap Out of Memory σε macOS και Linux

Σε macOS και Linux, η επιδιόρθωση μνήμης σωρού είναι πολύ παρόμοια. Θα έπρεπε εξαγωγή μιας μεταβλητής περιβάλλοντος που καθορίζει την ποσότητα εικονικής μνήμης που εκχωρείται στο Node.js.

Στο τερματικό σας, πριν εκτελέσετε το έργο σας, πληκτρολογήστε την ακόλουθη εντολή και πατήστε Enter:

εξαγωγή NODE_OPTIONS=--max-old-space-size=4096

Αυτό θα εκχωρήσει 4 GB εικονικής μνήμης στον χώρο εκτέλεσης του Node.js. Για να ορίσετε διαφορετική ποσότητα μνήμης, αντικαταστήστε 4096 με το απαιτούμενο ποσό σε MB.

Μπορείτε να προσθέσετε την παραπάνω εντολή στο αρχείο διαμόρφωσης για να αποφύγετε την επανάληψη της διαδικασίας. Για να το κάνετε αυτό, ακολουθήστε το ίδιο διαδικασία για τον ορισμό της μεταβλητής PATH.

Αποφύγετε το σφάλμα JavaScript Heap Out of Memory

Μπορείτε να αποφύγετε αυτό το σφάλμα διασφαλίζοντας ότι το πρόγραμμά σας δεν έχει διαρροές μνήμης. Η σωστή διαχείριση μνήμης είναι ζωτικής σημασίας όταν γράφετε τα προγράμματά σας, ειδικά σε γλώσσα χαμηλού επιπέδου.

Ενώ η αύξηση της εκχωρημένης μνήμης θα διορθώσει προσωρινά το πρόβλημα, θα πρέπει να βρείτε τη βασική αιτία και να το διορθώσετε.