javascript - Pronađi curenje memorije u Node.js/Express.js aplikaciji
Imam web aplikaciju u Express.js koja se stalno ruši zbog problema s memorijom:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap
out of memory
Kada pokrenem servis, korištenje memorije je oko 170Mb (prema htop-u kao RES memorija). Zatim počnem slati zahtjeve, i memorija počne rasti. Koristim memwatch kako bih pokušao pratiti problem u onome što izgleda kao curenje memorije, ali memwatch.HeapDiff() izvještava nešto poput:
{ before: { nodes: 2093729, size_bytes: 197165296, size: '188.03 mb' },
after: { nodes: 2491264, size_bytes: 232097040, size: '221.34 mb' },
...
... gdje razumijem da aplikacija koristi 221,34 MB za heap; ali s htop korištenje memorije je oko 2 GB kada se sruši.
Pitanje je, ako su moje pretpostavke točne, što bi moglo koristiti memoriju izvan heap-a koja se ipak prikazuje u htop-u kao RES memorija?
Odgovor #1
Ovo sam već vidio, gdje je memorija prikazana kao korištena bila mnogo manja nego memorija koju prikazuje htop.
U našem slučaju radilo se o curenju memorije u JavaScriptu koje je izgledalo malo, ali kada je popravljeno riješilo je problem s memorijom.
Napisao sam objavu u kojoj detaljno opisujem korake koje sam poduzeo da to dijagnosticiram, predugo je da bih to ovdje objavio.
https://techtldr.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/