Mộc Viên's Blog Mộc Viên's Blog
Cách sử dụng v8 module để phân tích memory usage trong Node.js.

Cách sử dụng v8 module để phân tích memory usage trong Node.js.

Ngày đăng:

Cách sử dụng v8 module để phân tích memory usage trong Node.js.

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.

Cách sử dụng caching để tăng hiệu suất của ứng dụng Node.js.
Caching (bộ nhớ đệm) là một kỹ thuật quan trọng giúp tăng hiệu suất của ứng dụng Node.js bằng cách lưu trữ tạm thời dữ liệu để truy xuất nhanh hơn, thay vì phải xử lý hoặc lấy lại từ nguồn chậm hơn (như database, API bên ngoài, hoặc

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.
Hướng Dẫn Chuyển Ethereum (ETH) Bằng Private Key Trong Node.js - Cảnh Báo Bảo Mật
1. Giới Thiệu Ethereum là một blockchain phổ biến hỗ trợ hợp đồng thông minh và giao dịch ngang hàng. Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển ETH bằng Node.js thông qua private key. Tuy nhiên, cần đặc biệt chú ý đến vấn đề bảo

Gần đây