内存
一、heap_size_used
1.1 认识
heapUsed
: 当前已使用的堆内存量(字节)。
1.2 process.memoryUsage 计算
process.memoryUsage()
是 Node.js
提供的一个内置方法,用于返回当前进程的内存使用情况。该方法返回一个包含多个内存相关属性的对象,包括:
-
heapTotal
:V8
引擎的堆内存的总量(单位:字节),即堆的大小。 -
heapUsed
:V8
引擎当前已使用的堆内存(单位:字节)。 -
external
:V8
引擎之外的内存使用量(例如,C++
绑定或其他外部资源占用的内存,单位:字节)。 -
rss
:常驻集大小(Resident Set Size
),即进程当前占用的物理内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
// 获取 Node.js 进程的内存使用情况
function getMemoryUsageStats() {
const memoryStats = process.memoryUsage();
const heapSizeUsed = memoryStats.heapUsed; // 已用堆内存
const heapSizeTotal = memoryStats.heapTotal; // 总堆内存
const externalMemory = memoryStats.external; // 外部内存
const rss = memoryStats.rss; // 常驻内存集
console.log(`Heap Size Used: ${heapSizeUsed} bytes`);
console.log(`Heap Size Total: ${heapSizeTotal} bytes`);
console.log(`External Memory: ${externalMemory} bytes`);
console.log(`RSS: ${rss} bytes`);
}
// 每秒打印一次内存使用情况
setInterval(getMemoryUsageStats, 1000);
1.3 v8.getHeapStatistics 计算
v8.getHeapStatistics()
是 V8
引擎提供的一个方法,它返回有关堆内存的详细信息。这个方法返回的信息比 process.memoryUsage()
更为详细,主要包括堆内存的各个区域的使用情况:
-
total_heap_size
:V8
引擎为堆分配的总内存大小(单位:字节)。 -
used_heap_size
:V8
引擎当前已使用的堆内存大小(单位:字节)。 -
heap_size_limit
:堆内存的最大大小限制(单位:字节)。 -
total_available_size
:堆内存可用的内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
const v8 = require('v8');
const v8HeapStatistics = () => {
const heapStats = v8.getHeapStatistics();
// heap_size_used: 已使用的堆内存
const heapSizeUsed = heapStats.used_heap_size;
// heap_size_total: 堆的总内存大小
const heapSizeTotal = heapStats.total_heap_size;
// heap_size_available: 可用的堆内存大小
const heapSizeAvailable = heapStats.total_available_size;
console.log(`heap_size_used: ${heapSizeUsed} bytes`);
console.log(`heap_size_total: ${heapSizeTotal} bytes`);
console.log(`heap_size_available: ${heapSizeAvailable} bytes`);
};
setInterval(v8HeapStatistics, 1000);
二、heap_size_total
2.1 认识
heapTotal
: 堆内存的总量(字节)。
2.2 process.memoryUsage 计算
process.memoryUsage()
是 Node.js
提供的一个内置方法,用于返回当前进程的内存使用情况。该方法返回一个包含多个内存相关属性的对象,包括:
-
heapTotal
:V8
引擎的堆内存的总量(单位:字节),即堆的大小。 -
heapUsed
:V8
引擎当前已使用的堆内存(单位:字节)。 -
external
:V8
引擎之外的内存使用量(例如,C++
绑定或其他外部资源占用的内存,单位:字节)。 -
rss
:常驻集大小(Resident Set Size
),即进程当前占用的物理内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
// 获取 Node.js 进程的内存使用情况
function getMemoryUsageStats() {
const memoryStats = process.memoryUsage();
const heapSizeUsed = memoryStats.heapUsed; // 已用堆内存
const heapSizeTotal = memoryStats.heapTotal; // 总堆内存
const externalMemory = memoryStats.external; // 外部内存
const rss = memoryStats.rss; // 常驻内存集
console.log(`Heap Size Used: ${heapSizeUsed} bytes`);
console.log(`Heap Size Total: ${heapSizeTotal} bytes`);
console.log(`External Memory: ${externalMemory} bytes`);
console.log(`RSS: ${rss} bytes`);
}
// 每秒打印一次内存使用情况
setInterval(getMemoryUsageStats, 1000);
2.3 v8.getHeapStatistics 计算
v8.getHeapStatistics()
是 V8
引擎提供的一个方法,它返回有关堆内存的详细信息。这个方法返回的信息比 process.memoryUsage()
更为详细,主要包括堆内存的各个区域的使用情况:
-
total_heap_size
:V8
引擎为堆分配的总内存大小(单位:字节)。 -
used_heap_size
:V8
引擎当前已使用的堆内存大小(单位:字节)。 -
heap_size_limit
:堆内存的最大大小限制(单位:字节)。 -
total_available_size
:堆内存可用的内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
const v8 = require('v8');
const v8HeapStatistics = () => {
const heapStats = v8.getHeapStatistics();
// heap_size_used: 已使用的堆内存
const heapSizeUsed = heapStats.used_heap_size;
// heap_size_total: 堆的总内存大小
const heapSizeTotal = heapStats.total_heap_size;
// heap_size_available: 可用的堆内存大小
const heapSizeAvailable = heapStats.total_available_size;
console.log(`heap_size_used: ${heapSizeUsed} bytes`);
console.log(`heap_size_total: ${heapSizeTotal} bytes`);
console.log(`heap_size_available: ${heapSizeAvailable} bytes`);
};
setInterval(v8HeapStatistics, 1000);
三、external_memory
3.1 认识
external
: 外部内存(例如 C++
插件、V8
之外的内存等)的使用量(字节)。
3.2 process.memoryUsage 计算
process.memoryUsage()
是 Node.js
提供的一个内置方法,用于返回当前进程的内存使用情况。该方法返回一个包含多个内存相关属性的对象,包括:
-
heapTotal
:V8
引擎的堆内存的总量(单位:字节),即堆的大小。 -
heapUsed
:V8
引擎当前已使用的堆内存(单位:字节)。 -
external
:V8
引擎之外的内存使用量(例如,C++
绑定或其他外部资源占用的内存,单位:字节)。 -
rss
:常驻集大小(Resident Set Size
),即进程当前占用的物理内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
// 获取 Node.js 进程的内存使用情况
function getMemoryUsageStats() {
const memoryStats = process.memoryUsage();
const heapSizeUsed = memoryStats.heapUsed; // 已用堆内存
const heapSizeTotal = memoryStats.heapTotal; // 总堆内存
const externalMemory = memoryStats.external; // 外部内存
const rss = memoryStats.rss; // 常驻内存集
console.log(`Heap Size Used: ${heapSizeUsed} bytes`);
console.log(`Heap Size Total: ${heapSizeTotal} bytes`);
console.log(`External Memory: ${externalMemory} bytes`);
console.log(`RSS: ${rss} bytes`);
}
// 每秒打印一次内存使用情况
setInterval(getMemoryUsageStats, 1000);
3.3 v8.getHeapStatistics 计算
v8.getHeapStatistics()
是 V8
引擎提供的一个方法,它返回有关堆内存的详细信息。这个方法返回的信息比 process.memoryUsage()
更为详细,主要包括堆内存的各个区域的使用情况:
-
total_heap_size
:V8
引擎为堆分配的总内存大小(单位:字节)。 -
used_heap_size
:V8
引擎当前已使用的堆内存大小(单位:字节)。 -
heap_size_limit
:堆内存的最大大小限制(单位:字节)。 -
total_available_size
:堆内存可用的内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
const v8 = require('v8');
const v8HeapStatistics = () => {
const heapStats = v8.getHeapStatistics();
// heap_size_used: 已使用的堆内存
const heapSizeUsed = heapStats.used_heap_size;
// heap_size_total: 堆的总内存大小
const heapSizeTotal = heapStats.total_heap_size;
// heap_size_available: 可用的堆内存大小
const heapSizeAvailable = heapStats.total_available_size;
console.log(`heap_size_used: ${heapSizeUsed} bytes`);
console.log(`heap_size_total: ${heapSizeTotal} bytes`);
console.log(`heap_size_available: ${heapSizeAvailable} bytes`);
};
setInterval(v8HeapStatistics, 1000);
四、resident_memory
4.1 认识
rss
: 常驻内存集(Resident Set Size
),即进程使用的总内存,包括所有的堆内存和外部内存等。
4.2 计算
process.memoryUsage()
是 Node.js
提供的一个内置方法,用于返回当前进程的内存使用情况。该方法返回一个包含多个内存相关属性的对象,包括:
-
heapTotal
:V8
引擎的堆内存的总量(单位:字节),即堆的大小。 -
heapUsed
:V8
引擎当前已使用的堆内存(单位:字节)。 -
external
:V8
引擎之外的内存使用量(例如,C++
绑定或其他外部资源占用的内存,单位:字节)。 -
rss
:常驻集大小(Resident Set Size
),即进程当前占用的物理内存大小(单位:字节)。
process.memoryUsage()
主要提供进程级别的内存统计信息,包含了堆的总大小、已用大小、外部内存(如 C++
绑定)的使用情况以及进程的常驻集内存, 是 Node.js
级别的简化接口,适合快速查看进程内存的总体情况; v8.getHeapStatistics()
提供更详细的堆内存统计信息,具体到堆内存的不同区域(如新生代、老生代等)的使用情况, 适用于需要深入分析堆内存使用情况的场景。
这两者并不是完全替代的关系,而是可以结合使用。process.memoryUsage()
更适合监控整个进程的内存使用情况,而 v8.getHeapStatistics()
则为需要深入堆内存分析的场景提供了更多的细节。
// 获取 Node.js 进程的内存使用情况
function getMemoryUsageStats() {
const memoryStats = process.memoryUsage();
const heapSizeUsed = memoryStats.heapUsed; // 已用堆内存
const heapSizeTotal = memoryStats.heapTotal; // 总堆内存
const externalMemory = memoryStats.external; // 外部内存
const rss = memoryStats.rss; // 常驻内存集
console.log(`Heap Size Used: ${heapSizeUsed} bytes`);
console.log(`Heap Size Total: ${heapSizeTotal} bytes`);
console.log(`External Memory: ${externalMemory} bytes`);
console.log(`RSS: ${rss} bytes`);
}
// 每秒打印一次内存使用情况
setInterval(getMemoryUsageStats, 1000);
五、heap_space_size_used
5.1 认识
v8.getHeapSpaceStatistics()
是 V8
引擎提供的一个方法,它可以返回关于堆空间的详细统计信息。V8
将堆内存划分为多个空间,每个空间代表堆的不同区域,例如 新生代(new space
)、老生代(old space
)、代码空间(code space
)、大型对象空间(large object space
) 等。
通过 v8.getHeapSpaceStatistics()
,你可以得到关于各个堆空间的详细内存使用情况,该方法返回一个数组,每个元素代表一个堆空间的统计信息,包含以下字段:
-
space_name
: 堆空间的名称(例如 new_space, old_space, code_space, large_object_space)。 -
space_size
: 堆空间的总大小(字节)。 -
space_used_size
: 堆空间的已用内存(字节)。 -
space_available_size
: 堆空间的可用内存(字节)。
5.2 计算
基于 v8.getHeapSpaceStatistics()
的实现,用于获取各个堆空间的使用情况:
const v8 = require('v8');
// 计算堆空间使用情况
function getHeapSpaceUsage() {
const heapStats = v8.getHeapSpaceStatistics();
// 用于存储总的空间使用情况
let totalUsed = 0;
let totalSize = 0;
let totalAvailable = 0;
heapStats.forEach(space => {
totalUsed += space.space_used_size;
totalSize += space.space_size;
totalAvailable += space.space_available_size;
console.log(`Heap Space: ${space.space_name}`);
console.log(`Total Size: ${space.space_size} bytes`);
console.log(`Used Size: ${space.space_used_size} bytes`);
console.log(`Available Size: ${space.space_available_size} bytes`);
console.log('-----------------------------------------');
});
console.log('-----------------------------------------');
console.log(`Total Heap Used Size: ${totalUsed} bytes`);
console.log(`Total Heap Space Size: ${totalSize} bytes`);
console.log(`Total Heap Available Size: ${totalAvailable} bytes`);
}
// 每秒打印一次堆空间内存使用情况
setInterval(getHeapSpaceUsage, 1000);
-
totalUsed
: 累加所有堆空间的已用内存。 -
totalSize
: 累加所有堆空间的总内存。 -
totalAvailable
: 累加所有堆空间的可用内存。
六、heap_space_size_total
6.1 认识
v8.getHeapSpaceStatistics()
是 V8
引擎提供的一个方法,它可以返回关于堆空间的详细统计信息。V8
将堆内存划分为多个空间,每个空间代表堆的不同区域,例如 新生代(new space
)、老生代(old space
)、代码空间(code space
)、大型对象空间(large object space
) 等。
通过 v8.getHeapSpaceStatistics()
,你可以得到关于各个堆空间的详细内存使用情况,该方法返回一个数组,每个元素代表一个堆空间的统计信息,包含以下字段:
-
space_name
: 堆空间的名称(例如 new_space, old_space, code_space, large_object_space)。 -
space_size
: 堆空间的总大小(字节)。 -
space_used_size
: 堆空间的已用内存(字节)。 -
space_available_size
: 堆空间的可用内存(字节)。
6.2 计算
基于 v8.getHeapSpaceStatistics()
的实现,用于获取各个堆空间的使用情况:
const v8 = require('v8');
// 计算堆空间使用情况
function getHeapSpaceUsage() {
const heapStats = v8.getHeapSpaceStatistics();
// 用于存储总的空间使用情况
let totalUsed = 0;
let totalSize = 0;
let totalAvailable = 0;
heapStats.forEach(space => {
totalUsed += space.space_used_size;
totalSize += space.space_size;
totalAvailable += space.space_available_size;
console.log(`Heap Space: ${space.space_name}`);
console.log(`Total Size: ${space.space_size} bytes`);
console.log(`Used Size: ${space.space_used_size} bytes`);
console.log(`Available Size: ${space.space_available_size} bytes`);
console.log('-----------------------------------------');
});
console.log('-----------------------------------------');
console.log(`Total Heap Used Size: ${totalUsed} bytes`);
console.log(`Total Heap Space Size: ${totalSize} bytes`);
console.log(`Total Heap Available Size: ${totalAvailable} bytes`);
}
// 每秒打印一次堆空间内存使用情况
setInterval(getHeapSpaceUsage, 1000);
-
totalUsed
: 累加所有堆空间的已用内存。 -
totalSize
: 累加所有堆空间的总内存。 -
totalAvailable
: 累加所有堆空间的可用内存。
七、heap_space_size_available
7.1 认识
v8.getHeapSpaceStatistics()
是 V8
引擎提供的一个方法,它可以返回关于堆空间的详细统计信息。V8
将堆内存划分为多个空间,每个空间代表堆的不同区域,例如 新生代(new space
)、老生代(old space
)、代码空间(code space
)、大型对象空间(large object space
) 等。
通过 v8.getHeapSpaceStatistics()
,你可以得到关于各个堆空间的详细内存使用情况,该方法返回一个数组,每个元素代表一个堆空间的统计信息,包含以下字段:
-
space_name
: 堆空间的名称(例如 new_space, old_space, code_space, large_object_space)。 -
space_size
: 堆空间的总大小(字节)。 -
space_used_size
: 堆空间的已用内存(字节)。 -
space_available_size
: 堆空间的可用内存(字节)。
7.2 计算
基于 v8.getHeapSpaceStatistics()
的实现,用于获取各个堆空间的使用情况:
const v8 = require('v8');
// 计算堆空间使用情况
function getHeapSpaceUsage() {
const heapStats = v8.getHeapSpaceStatistics();
// 用于存储总的空间使用情况
let totalUsed = 0;
let totalSize = 0;
let totalAvailable = 0;
heapStats.forEach(space => {
totalUsed += space.space_used_size;
totalSize += space.space_size;
totalAvailable += space.space_available_size;
console.log(`Heap Space: ${space.space_name}`);
console.log(`Total Size: ${space.space_size} bytes`);
console.log(`Used Size: ${space.space_used_size} bytes`);
console.log(`Available Size: ${space.space_available_size} bytes`);
console.log('-----------------------------------------');
});
console.log('-----------------------------------------');
console.log(`Total Heap Used Size: ${totalUsed} bytes`);
console.log(`Total Heap Space Size: ${totalSize} bytes`);
console.log(`Total Heap Available Size: ${totalAvailable} bytes`);
}
// 每秒打印一次堆空间内存使用情况
setInterval(getHeapSpaceUsage, 1000);
-
totalUsed
: 累加所有堆空间的已用内存。 -
totalSize
: 累加所有堆空间的总内存。 -
totalAvailable
: 累加所有堆空间的可用内存。