Cara Memperbaiki “JavaScript Heap Out of Memory Error”

JavaScript tetap menjadi salah satu bahasa pemrograman yang paling banyak digunakan karena keserbagunaannya. Untuk menjalankan JavaScript di luar lingkungan browser, pengembang harus memasang Node.js, lingkungan waktu proses lintas platform.

Tumpukan JavaScript dari kesalahan memori umum terjadi saat menjalankan proyek JavaScript Node.js.

Masalah heap out of memory JavaScript adalah kesalahan yang terjadi ketika memori default yang dialokasikan oleh sistem komputer tidak cukup untuk menjalankan proyek besar.

Jika Anda mengalami kesalahan tumpukan kehabisan memori, program Anda akan mogok dan menampilkan keluaran ini;

KESALAHAN FATAL: CALL_AND_RETRY_LAST Alokasi gagal – JavaScript menumpuk memori

Atau

Kesalahan fatal: alokasi ukuran tabel tidak valid gagal – tumpukan javascript kehabisan memori

Penyebab JavaScript menumpuk karena kesalahan memori

  • Adanya struktur data yang besar: Bekerja dengan struktur data yang besar seperti matriks atau larik dapat menghabiskan banyak ruang, yang pada akhirnya menyebabkan kesalahan kehabisan memori.

Ini adalah contoh struktur data besar dengan satu miliar elemen;

let array = [];

for (let i = 0; i < 1000000000; i++) {

  array.push(i);

}
  • Manajemen memori yang buruk: Saat aplikasi Anda berkembang, Anda harus melepaskan beberapa objek yang tidak lagi Anda perlukan.

Ini adalah contoh fungsi yang menyebabkan kebocoran memori;

let array = [];

setInterval(function() {

  array.push(new Array(1000000).join("x"));

}, 1000);
  • Putaran tak terbatas: Kode seperti itu berjalan selamanya karena kondisi terminasi tidak pernah tercapai.

Ini adalah contoh loop tak terbatas yang akan dieksekusi selamanya;

while (true) {

    console.log(1);

}

Loop tak terbatas dapat menyebabkan kesalahan ini karena menggunakan memori cukup cepat.

  • Fungsi rekursif: Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri secara tidak langsung atau langsung untuk mengulangi suatu/seperangkat instruksi tertentu hingga kondisi tertentu terpenuhi. Jika fungsi-fungsi ini dirancang dengan baik, kemungkinan besar akan mengarah pada memimpin memori dan, akhirnya menumpuk kesalahan memori.
  • Kehadiran banyak objek dalam sepotong kode: Jika kode Anda memiliki banyak objek besar, memori yang digunakan oleh objek tersebut secara kolektif dapat menyebabkan kelebihan beban.
  Apa Arti “ICYMI”, dan Bagaimana Cara Menggunakannya?

Perbaiki tumpukan JS dari kesalahan memori

Kesalahan ini dapat terjadi di sistem operasi berbasis Windows, macOS, dan Linux seperti Ubuntu. Untungnya, kesalahan tersebut dapat diperbaiki, terlepas dari sistem operasi Anda.

#1. Memperbaiki tumpukan JavaScript dari kesalahan memori pada OS Windows

Langkah 1: Klik menu mulai dan temukan Pengaturan Sistem Lanjutan.

Langkah 2: Klik pada Variabel Lingkungan di bagian kiri bawah kotak dialog.

Langkah 3: Klik Baru pada variabel Pengguna atau variabel Sistem. Opsi pertama menerapkan perubahan pada akun pengguna saat ini. Namun, opsi kedua menerapkan perubahan ke seluruh sistem.

Langkah 4: Akan ada dua opsi yang ditampilkan; pada nama variabel, masukkan NODE_OPTIONS dan pada Nilai variabel, masukkan –max-old-space-size=4096. Pada langkah ini, angka 4096 akan mengalokasikan memori virtual sebesar 4GB ke Node.js. Anda dapat mengalokasikan lebih banyak seperti 8GB, dengan menetapkan nilainya sebagai –max-old-space-size=8192.

Langkah 5: Klik ok, terapkan dan terakhir, ok untuk menyimpan perubahan.

Anda juga dapat menggunakan terminal Windows PowerShell untuk mengatasi kesalahan tersebut. Buka terminal di OS Windows Anda dan masukkan perintah berikut;

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

Anda juga dapat mengatasi kesalahan untuk sementara dengan menjalankan perintah ini sebelum menjalankan aplikasi Anda;

set NODE_OPTIONS=--max-old-space-size=4096

#2. Memperbaiki tumpukan JavaScript dari kesalahan memori di Linux

  • Langkah 1: Identifikasi sumber kesalahan. Periksa log atau output konsol untuk menentukan baris kode/file yang menyebabkan kesalahan.
  • Langkah 2: Ekspor variabel lingkungan yang menentukan memori virtual yang telah Anda alokasikan ke Node.js. Gunakan perintah ini;
export NODE_OPTIONS=--max-old-space-size=4096

Langkah-langkah ini akan mengalokasikan memori virtual 4GB ke Node.js. Jika kesalahan masih berlanjut, Anda dapat menambah ukuran memori dengan menggandakannya.

Misalnya, jika Anda ingin mengalokasikan 8GB sebagai memori virtual, Anda dapat menjalankan perintah ini;

export NODE_OPTIONS=--max-old-space-size=8192

#3. Memperbaiki tumpukan JavaScript dari kesalahan memori di macOS

Anda dapat memecahkan tumpukan JavaScript dari kesalahan memori di macOS menggunakan pendekatan yang sama seperti di Linux. Ikuti langkah ini;

  • Langkah 1: Identifikasi sumber kesalahan dengan memeriksa log atau keluaran konsol untuk menentukan baris kode/file yang menyebabkan kesalahan.
  • Langkah 2: Ekspor variabel lingkungan yang menentukan memori virtual yang telah Anda alokasikan ke Node.js. Gunakan perintah ini;
export NODE_OPTIONS=--max-old-space-size=4096

Langkah-langkah ini akan mengalokasikan memori virtual 4GB ke Node.js. Jika kesalahan masih berlanjut, Anda dapat menambah ukuran memori dengan menggandakannya.

  6 Generator Video Bertenaga AI Terbaik untuk Bisnis Anda

Misalnya, jika Anda ingin mengalokasikan 8GB sebagai memori virtual, Anda dapat menjalankan perintah ini;

export NODE_OPTIONS=--max-old-space-size=8192

Meningkatkan memori selama instalasi NPM

Solusi yang kami tawarkan sejauh ini sesuai dengan kesalahan yang terjadi saat Anda menjalankan aplikasi Node.js. Namun, Anda dapat mengalokasikan memori virtual untuk mengatasi kesalahan heap out of memory saat Anda menginstal paket JavaScript. Gunakan perintah ini;

node --max-old-space-size=4096 (which npm) install

Catatan: Anda dapat terus meningkatkan alokasi memori virtual sebesar 1GB, 2GB, 3GB, atau 4GB. Anda harus menentukan ukuran memori dalam MB. Namun, jangan alokasikan seluruh memori mesin ke Node.js karena ini dapat menyebabkan program Anda mogok. Sebagai praktik yang baik, jika mesin Anda memiliki 16GB, Anda dapat mengalokasikan hingga 8GB ke Node.js.

Cegah JavaScript tumpukan dari kesalahan memori

Kami sejauh ini telah membahas cara memperbaiki kesalahan JavaScript heap out-of-memory ketika itu terjadi. Untungnya, Anda juga dapat memiliki langkah-langkah untuk mencegah kesalahan ini terjadi saat Anda menjalankan kode JavaScript. Ini adalah beberapa pendekatan terbaik:

#1. Membagi data menjadi potongan-potongan kecil

Anda mungkin memiliki program Node.js yang mengimpor kumpulan data besar dari file CSV besar melalui proses ETL: Extract – Transform – Load. Anda mungkin menemukan bahwa aplikasi Anda selalu mogok saat mencoba mengimpor data. Jika Anda bekerja dengan MongoDB, Anda dapat mengatasi kesalahan tersebut dengan memiliki instruksi baris perintah seperti;

split -l 1000000 users.csv

Perintah ini menginstruksikan Node.js untuk membagi file bernama pengguna menjadi beberapa file dengan masing-masing 1.000.000 pengguna. Bendera -l menentukan bahwa file harus dipisahkan berdasarkan jumlah baris kode.

#2. Memantau penggunaan memori

Anda dapat menggunakan profiler memori untuk mendeteksi kebocoran memori dalam kode Anda. Anda dapat menggabungkan memori bawaan Node.js dan ChromeDevTools untuk mencapainya. Keduanya dapat mendeteksi masalah dalam kode Anda dan memperbaikinya.

Anda juga dapat menggunakan alat eksternal seperti Datadog, New Relic, dan AppDynamics untuk memantau kinerja aplikasi Anda dan mengambil tindakan yang diperlukan. Anda juga dapat memeriksa penggunaan memori pada aplikasi Node.js melalui metode process.memoryUsage() .

  14 Perangkat Lunak Produksi Musik Terbaik untuk Profesional Audio

#3. Menghindari kebocoran memori

Kebocoran memori terjadi saat aplikasi Node.js Anda mempertahankan referensi ke objek yang tidak diperlukan lagi. Jika objek tersebut bukan sampah yang dikumpulkan, akan ada penumpukan penggunaan memori dari waktu ke waktu.

Ada beberapa pendekatan untuk menghindari kebocoran memori, seperti menghindari variabel global dalam kode Anda, menghindari pemblokiran operasi I/O, dan menggunakan kata kunci let dan const saat mendeklarasikan variabel Anda alih-alih var.

#4. Proses pemijahan

Jika Anda menjalankan Node.js pada mesin dengan memori terbatas, seperti Raspberry Pi, kemungkinan besar Anda akan mengalami kesalahan kehabisan memori. Anda dapat memiliki satu proses master, dan yang lainnya dikelompokkan sebagai pekerja. Segera setelah proses master mendeteksi bahwa sistem kehabisan memori, ia akan mematikan proses tersebut dan menugaskan tugas ke proses lain yang tidak kelebihan beban.

#5. Perbarui perangkat keras

Jika meningkatkan alokasi memori dan menjalankan proses yang terdaftar untuk mencegah tumpukan kesalahan memori tidak menyelesaikan masalah Anda, maka Anda dapat mempertimbangkan untuk memperbarui perangkat keras Anda. Node.js dapat berjalan pada RAM serendah 512MB. Namun, aplikasi Anda akan membutuhkan lebih banyak RAM seiring pertumbuhannya.

Di sisi lain, menambah jumlah CPU juga dapat meningkatkan alokasi memori. Idealnya, 2 CPU atau lebih akan memungkinkan aplikasi Anda menggunakan thread pekerja untuk tugas intensif CPU seperti kriptografi dan pemrosesan gambar.

FAQ

Apa yang menyebabkan JavaScript Heap Out of Memory Error?

Kesalahan ini dapat disebabkan oleh beberapa alasan;
1. Memori bocor
2. Putaran tak terbatas
3. Kehadiran banyak objek dalam suatu proyek
4. Adanya struktur data yang besar

Apakah kesalahan JavaScript Heap Out of Memory dapat dipecahkan?

Ya. Anda dapat mengatasi kesalahan tersebut melalui;
1. Mengalokasikan lebih banyak memori virtual ke Node.js
2. Menghilangkan kebocoran memori
3. Mengoptimalkan kode Anda
4. Mengupgrade perangkat keras Anda

Bagaimana Anda bisa mengatasi kesalahan Heap Out of Memory di aplikasi React?

Bereaksi adalah salah satu pustaka JavaScript paling populer. Temukan file package.json di direktori root dan baris ini ke bagian skrip;

"scripts": {

    "start": "react-scripts --max_old_space_size=4096 start",

    "build": "react-scripts --max_old_space_size=4096 build",

    "test": "react-scripts test",

    "eject": "react-scripts eject"

}

Membungkus

Sebagian besar pengembang terbiasa dengan bug dan kesalahan kode, bukan kesalahan runtime, karena mereka menjalankan program Node.js mereka. Untungnya, Anda tidak perlu khawatir, karena kesalahan heap out of memory dapat diperbaiki. Kami telah mendefinisikan apa itu JavaScript heap out of memory error, menjelaskan cara mengatasinya, dan cara menghindarinya dalam proyek Node.js Anda berikutnya.

Selanjutnya, Anda juga dapat membaca cara menghindari beberapa Kesalahan JavaScript yang umum.