javascript - Cari Kebocoran Memori pada Aplikasi Node.js/Express.js
Saya mempunyai aplikasi web Express.js yang sentiasa rosak kerana masalah memori:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap
out of memory
Apabila saya memulakan perkhidmatan, penggunaan memori adalah sekitar 170Mb (dilaporkan oleh htop sebagai memori RES). Kemudian saya mula menghantar permintaan kepadanya, dan memori mula meningkat. Saya menggunakan memwatch untuk mencuba menjejaki masalah yang kelihatan seperti kebocoran memori, tetapi memwatch.HeapDiff() melaporkan sesuatu seperti:
{ before: { nodes: 2093729, size_bytes: 197165296, size: '188.03 mb' },
after: { nodes: 2491264, size_bytes: 232097040, size: '221.34 mb' },
...
... di mana saya faham bahawa aplikasi ini menggunakan 221.34mb untuk heap; tetapi dengan htop penggunaan memori adalah sekitar 2GB apabila ia rosak.
Soalannya ialah, jika andaian saya betul, apa yang boleh menggunakan memori bukan heap yang masih dilaporkan oleh htop sebagai memori RES?
Jawapan #1
Saya pernah melihat ini sebelum ini, di mana memori yang dilaporkan digunakan jauh lebih kecil daripada memori seperti yang dilihat oleh htop.
Dalam kes kami, ia adalah kebocoran memori dalam JavaScript yang kelihatan kecil, tetapi apabila diperbaiki, masalah memori diselesaikan.
Saya menulis satu kiriman yang memperincikan langkah-langkah yang saya ambil untuk mendiagnosisnya, ia terlalu panjang untuk dikirim di sini.
https://techtldr.com/panduan-mudah-untuk-menemui-kebocoran-memori-javascript-dalam-node-js/