确保 NODE_OPTIONS --max-old-space-size 正常工作

Cem*_*mre 7 memory memory-management node.js

这可能听起来很奇怪,但我正在设置--max-old-space-size选项,我想确保配置到位,以免出现运行时错误。

有没有办法在运行时验证内存限制?

And*_*rey 10

要获得以兆字节为单位的堆大小,请使用

const v8 = require('v8')
v8.getHeapStatistics().total_available_size / 1024 / 1024
Run Code Online (Sandbox Code Playgroud)

示例 1

节点 --max-old-space-size=256

v8.getHeapStatistics().total_available_size / 1024 / 1024

284.47106170654297

示例 2

节点 --max-old-space-size=512

v8.getHeapStatistics().total_available_size / 1024 / 1024

544.9713745117188

示例 3

export NODE_OPTIONS=--max-old-space-size=1024

节点

v8.getHeapStatistics().total_available_size / 1024 / 1024

1065.4709014892578

所以,正如我们所看到的,命令行参数和环境变量 NODE_OPTIONS 都可以工作。


Luc*_*ren 1

因此,要验证您实际使用了多少内存,可以调用

process.memoryUsage()
Run Code Online (Sandbox Code Playgroud)

这将返回

{
  rss: 4935680,
  heapTotal: 1826816,
  heapUsed: 650472,
  external: 49879
}
Run Code Online (Sandbox Code Playgroud)

heapTotal 指的是可用内存。heapUsed 指的是已使用的堆内存,external 指的是绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用情况。rss,Resident Set Size,是主存设备中占用的空间量 https://nodejs.org/api/process.html

  • 那么这 4 个数字中哪一个是受“--max-old-space-size”限制的呢?我以前以为是 `rss`,但现在我有 `"rss":409.92`,尽管设置了 `--max_old_space_size=350`。对OP的问题有一个明确的答案会有很大帮助...... (3认同)
  • process.memoryUsage() 在我的 x64 Debian 上返回与各种 --max-old-space-size 相同的结果。所以这不是答案。请参阅下面我的回答。 (2认同)