Trong Node.js, bạn có thể sử dụng module v8
để phân tích memory usage, vì v8
cung cấp API cho phép lấy thông tin về heap memory mà engine V8 đang sử dụng. Dưới đây là cách sử dụng v8
module để phân tích memory usage.
1. Import module v8
const v8 = require('v8');
2. Lấy thông tin heap statistics
Bạn có thể sử dụng v8.getHeapStatistics()
để lấy thông tin về bộ nhớ heap hiện tại.
const heapStats = v8.getHeapStatistics();
console.log(heapStats);
Output mẫu:
{
"total_heap_size": 4964352,
"total_heap_size_executable": 524288,
"total_physical_size": 4259840,
"total_available_size": 2190000000,
"used_heap_size": 3674832,
"heap_size_limit": 2197815296,
"malloced_memory": 16384,
"peak_malloced_memory": 106496,
"number_of_native_contexts": 1,
"number_of_detached_contexts": 0
}
Giải thích một số thông tin:
total_heap_size
: Tổng dung lượng heap được cấp phát.used_heap_size
: Bộ nhớ heap đang được sử dụng.heap_size_limit
: Giới hạn tối đa của heap mà V8 có thể sử dụng.number_of_native_contexts
: Số lượng context của JavaScript được tạo.number_of_detached_contexts
: Số context bị tách khỏi bộ nhớ nhưng chưa được thu hồi.

3. Lấy heap space statistics
Bạn cũng có thể phân tích chi tiết từng vùng trong heap bằng v8.getHeapSpaceStatistics()
:
const heapSpaces = v8.getHeapSpaceStatistics();
console.log(heapSpaces);
Output mẫu:
[
{
"space_name": "new_space",
"space_size": 1048576,
"space_used_size": 679584,
"space_available_size": 368992,
"physical_space_size": 1048576
},
{
"space_name": "old_space",
"space_size": 3222272,
"space_used_size": 2826176,
"space_available_size": 396096,
"physical_space_size": 3222272
}
]
new_space
: Vùng chứa các object mới được cấp phát.old_space
: Vùng chứa object lâu dài.space_size
: Tổng kích thước không gian.space_used_size
: Dung lượng đã được sử dụng.space_available_size
: Dung lượng còn trống.
4. Kiểm tra hiệu suất và tối ưu bộ nhớ
Khi ứng dụng của bạn gặp vấn đề về bộ nhớ, bạn có thể chạy đoạn script này định kỳ để theo dõi việc sử dụng memory.
setInterval(() => {
console.log("Heap Statistics:", v8.getHeapStatistics());
console.log("Heap Spaces:", v8.getHeapSpaceStatistics());
}, 5000); // Cập nhật mỗi 5 giây
5. Tạo Snapshot của Heap để debug
Nếu muốn kiểm tra chi tiết về đối tượng trong bộ nhớ, bạn có thể tạo snapshot bằng cách sử dụng module heapdump
:
npm install heapdump
Và trong code:
const heapdump = require('heapdump');
heapdump.writeSnapshot('./heapdump-' + Date.now() + '.heapsnapshot', (err, filename) => {
console.log('Heap snapshot saved to', filename);
});
Bạn có thể mở file snapshot trong Chrome DevTools để phân tích memory leak.
Kết luận
Module v8
cung cấp các công cụ hữu ích để theo dõi memory usage trong Node.js. Bạn có thể sử dụng:
getHeapStatistics()
để lấy thông tin chung về heap.getHeapSpaceStatistics()
để xem chi tiết các vùng heap.heapdump
để chụp snapshot và debug memory leak.