Saya mengalami kesulitan untuk memahami bagaimana Node.js bertindak berdasarkan parameter max-old-space-size
.
Dalam kasus saya, misalnya, saya menjalankan dua t2.small
instans AWS (RAM 2GB).
Tidak yakin mengapa, tapi saya mengatur max-old-space-size=4096
(4GB). Apa yang dilakukan node dalam kasus ini? Bisakah konfigurasi ini menyebabkan kemungkinan kegagalan alokasi memori?
Bagaimana cara menentukan nilai yang benar max-old-space-size
berdasarkan sumber daya server?
Aplikasi saya terus meningkatkan penggunaan memori dan saya mencoba memahami segala sesuatu tentang internal node.
Jawaban:
"Ruang lama" adalah bagian terbesar dan paling dapat dikonfigurasi dari heap yang dikelola (alias sampah-dikumpulkan) V8 (yaitu tempat objek JavaScript berada), dan
--max-old-space-size
tanda mengontrol ukuran maksimumnya. Saat konsumsi memori mendekati batas, V8 akan menghabiskan lebih banyak waktu untuk pengumpulan sampah dalam upaya mengosongkan memori yang tidak digunakan.Jika konsumsi memori heap (yaitu objek langsung yang tidak dapat dibebaskan oleh GC) melebihi batas, V8 akan menghentikan proses Anda (karena kurangnya alternatif), jadi Anda tidak ingin menyetelnya terlalu rendah. Tentu saja, jika Anda menyetelnya terlalu tinggi, penggunaan heap tambahan yang diizinkan oleh V8 dapat menyebabkan keseluruhan sistem Anda kehabisan memori (dan menukar atau mematikan proses acak, karena kurangnya alternatif).
Singkatnya, pada mesin dengan memori 2GB saya mungkin akan menyetel
--max-old-space-size
sekitar 1,5GB untuk menyisakan beberapa memori untuk penggunaan lain dan menghindari pertukaran.sumber
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
Pembaruan 2020
Opsi ini sekarang didokumentasikan secara resmi oleh node . Untuk mesin 2GB, Anda mungkin harus menggunakan:
NODE_OPTIONS=--max-old-space-size=1536
Untuk menentukan jumlah yang akan digunakan : Anda dapat melihat memori yang tersedia di mesin Linux menggunakan
free -m
. Perhatikan bahwa Anda dapat menggunakanfree
danbuffers/cache
memori yang digabungkan, karenabuffers/cache
dapat dibuang (buffer dan cache ini adalah cara yang bagus untuk menggunakan memori yang tidak digunakan).Perhatikan dokumentasi resmi untuk
max-old-space-size
juga menyebutkan:Karenanya nilai di atas. Pertimbangkan bahwa jumlah memori yang dibutuhkan untuk OS dasar tidak banyak berubah, jadi Anda dapat dengan senang hati melakukan 3.5 pada mesin 4GB dll.
sumber
Kesalahan ini terjadi ketika memori yang dialokasikan untuk aplikasi yang mengeksekusi kurang dari memori yang dibutuhkan. Secara default, batas memori di Node.js adalah 512 MB. Untuk meningkatkan jumlah ini, Anda perlu mengatur argumen batas memori
—-max-old-space-size
. Ini akan membantu menghindari masalah batas memori.node --max-old-space-size=1024 index.js #increase to 1gb node --max-old-space-size=2048 index.js #increase to 2gb node --max-old-space-size=3072 index.js #increase to 3gb node --max-old-space-size=4096 index.js #increase to 4gb node --max-old-space-size=5120 index.js #increase to 5gb node --max-old-space-size=6144 index.js #increase to 6gb node --max-old-space-size=7168 index.js #increase to 7gb node --max-old-space-size=8192 index.js #increase to 8gb
https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c
sumber
node --v8-options
) bahwa default yang dilaporkan adalah 4096 dan tanpa pengaturanmax-old-space-size
rangkaian pengujian yang saya jalankan mendapatkan alokasi hingga 1,5Gb tanpa masalah. Artikel sedang yang ditautkan berasal dari tahun 2016 jadi kemungkinan hal-hal telah berpindah sejak ditulis.node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0 dan v14.3.0 -> 2096Mb, v10.20.1 -> 1432Mbheap_size_limit
. Untuk shell UNIX normal, perlu dikutip secara berbeda:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
Jika Anda hanya ingin membuatnya bekerja dari proyek yang sedang Anda kerjakan, Ikuti dua langkah berikut:
Dalam cd proyek Anda ke node_module / @ angular cd node_module / @ angular
Sekarang jalankan perintah di bawah export NODE_OPTIONS = - max-old-space-size = 8192
sumber