Bagaimana cara memantau penggunaan memori Node.js?
Bagaimana cara memantau penggunaan memori Node.js?
Jawaban:
node-memwatch : mendeteksi dan menemukan kebocoran memori dalam kode Node.JS. Periksa tutorial ini Melacak Kebocoran Memori di Node.js
Built-in proses modul memiliki metode memoryUsage
yang menawarkan wawasan dalam penggunaan memori dari proses Node.js saat ini. Berikut adalah contoh dari Node v0.12.2 pada sistem 64-bit:
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
Dalam contoh sederhana ini, Anda dapat melihat bahwa mengalokasikan array 10 juta elemen konsumen sekitar 80MB (lihatlah heapUsed
).
Jika Anda melihat kode sumber V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), maka Anda akan melihat bahwa memori yang digunakan oleh sebuah array adalah nilai tetap ditambah panjang dikalikan dengan ukuran pointer. Yang terakhir adalah 8 byte pada sistem 64-bit, yang menegaskan bahwa perbedaan memori yang diamati sebesar 8 x 10 = 80MB masuk akal.
--expose-gc
untuk gc
fungsi?
--expose-gc
untuk process.memoryUsage()
. gc()
(membutuhkan --expose-gc
) digunakan dalam jawaban untuk secara deterministik memicu pengumpulan sampah agar lebih mudah untuk melihat apa yang process.memoryUsage
dilaporkan.
Juga, jika Anda ingin mengetahui memori global daripada proses node ':
var os = require('os');
os.freemem();
os.totalmem();
Memwatch asli pada dasarnya sudah mati. Cobalah memwatch-next sebagai gantinya, yang tampaknya berfungsi dengan baik pada Node versi modern.
Di Linux / Unix (catatan: Mac OS adalah Unix) gunakan top
dan tekan M ( Shift+M ) untuk mengurutkan proses berdasarkan penggunaan memori.
Di Windows gunakan Task Manager.
Applications > Utilities
dan Anda akan menemukan sebuah Activity Monitor
aplikasi. Yang itu setara dengan Task Manager. OS X juga memiliki top
perintahnya.
htop
sebagai ganti top di Linux. Jauh lebih baik.