如何通过编程方式知道NodeJS应用程序何时内存不足



如何知道应用程序何时内存不足。

对我来说,我在服务器上进行一些视频转码,有时会导致内存不足的错误。

所以,我想知道应用程序何时内存不足,这样我就可以立即杀死视频转码器。

谢谢。

您可以看到内置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—为ArrayBuffers和Buffers分配的内存

对于您的问题,您可能需要使用heapTotalheapUsed。根据该值,您可以关闭该服务。例如:

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

最新更新