如何以编程方式知道NodeJS应用程序何时耗尽内存

rdlzhqv9  于 2023-04-05  发布在  Node.js
关注(0)|答案(2)|浏览(124)

我如何知道我的应用程序何时内存不足。
对我来说,我在服务器上做一些视频转码,有时会导致内存不足的错误。
因此,我希望知道应用程序何时耗尽内存,以便我可以立即杀死视频转码器。
谢谢大家。

vd8tlhqk

vd8tlhqk1#

您可以看到内置的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分配的内存。

对于您的问题,您可能需要使用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...
}

除以100万的部分只是将字节转换为兆字节(B到MB)。
将代码更改为您喜欢的代码-这只是一个示例。

uqcuzwp8

uqcuzwp82#

使用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

相关问题