如何知道应用程序何时内存不足。
对我来说,我在服务器上进行一些视频转码,有时会导致内存不足的错误。
所以,我想知道应用程序何时内存不足,这样我就可以立即杀死视频转码器。
谢谢。
您可以看到内置process
模块使用了多少内存。
const process = require("process");
process
模块有一个名为memoryUsage
的方法,它显示Node.js中内存使用情况的信息
console.log(process.memoryUsage());
当您运行代码时,您应该看到一个对象,其中包含内存使用所需的所有信息!
$ node index.js
{
rss: 4935680,
heapTotal: 1826816,
heapUsed: 650472,
external: 49879,
arrayBuffers: 9386
}
以下是对每个属性的一些见解。
rss
-(常驻集大小(主存储器设备中占用的空间量heapTotal
-V8发动机中的内存总量heapUsed
-V8发动机使用的内存量external
-绑定到JavaScript对象的C++对象的内存使用情况(由V8管理(arrayBuffers
—为ArrayBuffer
s和Buffer
s分配的内存
对于您的问题,您可能需要使用heapTotal
和heapUsed
。根据该值,您可以关闭该服务。例如:
const process = require("process");
const mem = process.memoryUsage();
const MAX_SIZE = 50; // Change the value to what you want
if ((mem.heapUsed / 1000000) >= MAX_SIZE) {
videoTranscoder.kill(); // Just an example...
}
除以一百万的部分只是将字节转换为兆字节(B转换为MB(。
将代码更改为您喜欢的内容-这只是一个示例
使用v8.getHeapStatistics()
。它比process.memoryUsage()
更有信息性。特别是,它包含heap_size_limit
,它告诉Node.js进程内存的真正限制。
import * as v8 from 'node:v8';
const maxHeap = v8.getHeapStatistics().heap_size_limit;
// get the percentage of the max heap currently in use
function getPercentOfMaxHeapInUse() {
return v8.getHeapStatistics().used_heap_size / maxHeap;
}
// error out if over 80% of the heap is in use
if (getPercentOfMaxHeapInUse() > 0.8) {
throw new Error('using too much memory');
}
您可以使用--max_old_space_size
标志修改最大堆空间,如下所示:
# set the heap max to 3 GB (1024 * 3)
node --max_old_space_size=3072 index.js