Câu trả lời:
node-memwatch : phát hiện và tìm rò rỉ bộ nhớ trong mã Node.JS. Xem hướng dẫn này Theo dõi rò rỉ bộ nhớ trong Node.js
Mô- đun quy trình tích hợp có một phương pháp memoryUsage
cung cấp thông tin chi tiết về việc sử dụng bộ nhớ của quy trình Node.js hiện tại. Đây là một ví dụ từ Node v0.12.2 trên hệ thống 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 }
Trong ví dụ đơn giản này, bạn có thể thấy rằng việc phân bổ một mảng gồm 10 triệu phần tử mà người tiêu dùng có xấp xỉ 80MB (hãy xem qua heapUsed
).
Nếu bạn nhìn vào mã nguồn V8 của ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), sau đó bạn sẽ thấy rằng bộ nhớ được sử dụng bởi một mảng là một giá trị cố định cộng với chiều dài nhân với kích thước của một con trỏ. Sau đó là 8 byte trên hệ thống 64 bit, điều này xác nhận rằng sự khác biệt bộ nhớ quan sát được là 8 x 10 = 80MB là có ý nghĩa.
--expose-gc
cho gc
chức năng?
--expose-gc
cho process.memoryUsage()
. gc()
(Yêu cầu --expose-gc
) được sử dụng trong câu trả lời để kích hoạt xác định việc thu gom rác để giúp bạn dễ dàng xem các process.memoryUsage
báo cáo hơn.
Ngoài ra, nếu bạn muốn biết bộ nhớ chung hơn là quy trình nút ':
var os = require('os');
os.freemem();
os.totalmem();
Bản gốc memwatch là về cơ bản đã chết. Thay vào đó, hãy thử memwatch-next , có vẻ như đang hoạt động tốt trên các phiên bản hiện đại của Node.
Trên Linux / Unix (lưu ý: Mac OS là Unix) sử dụng top
và nhấn M ( Shift+ M) để sắp xếp các quy trình theo mức sử dụng bộ nhớ.
Trên Windows sử dụng Trình quản lý Tác vụ.
Applications > Utilities
và bạn sẽ tìm thấy một Activity Monitor
ứng dụng. Cái đó tương đương với Task Manager. OS X cũng có top
lệnh.
htop
thay vì hàng đầu trên Linux. Đó là điều tốt hơn nhiều.