【问题标题】:How to limit node application memory size, and how to verify current memory usage and capacity?如何限制节点应用内存大小,如何验证当前内存使用和容量?
【发布时间】:2018-04-05 16:03:29
【问题描述】:

我想自定义节点应用程序内存大小,还想添加一些中间件来记录实时应用程序内存使用和容量。

我知道可以通过将 --max-old-space-size 设置为最大 ~1gb(32 位)和 ~1.7gb(64 位)来提高内存限制

例子:

node --max-old-space-size=1024 app.js

但是当我使用v8时,如何验证内存容量和使用情况?

更新:

我使用另一种方法来提高 v8 应用程序的内存。

const v8 = require('v8');
v8.setFlagsFromString('--max_old_space_size=2048');

这是 HeapSpaceStatistics 的日志

########## v8.getHeapSpaceStatistics() ################
[
    {
        "space_name": "new_space",
        "space_size": 1048576,
        "space_used_size": 781704,
        "space_available_size": 249464,
        "physical_space_size": 798416
    },
    {
        "space_name": "old_space",
        "space_size": 18874368,
        "space_used_size": 16844024,
        "space_available_size": 270840,
        "physical_space_size": 18772464
    },
    {
        "space_name": "code_space",
        "space_size": 4718592,
        "space_used_size": 4344800,
        "space_available_size": 95424,
        "physical_space_size": 4586176
    },
    {
        "space_name": "map_space",
        "space_size": 1572864,
        "space_used_size": 962104,
        "space_available_size": 584648,
        "physical_space_size": 1187888
    },
    {
        "space_name": "large_object_space",
        "space_size": 1626112,
        "space_used_size": 1603664,
        "space_available_size": 1471614464,
        "physical_space_size": 1626112
    }
]

我已经根据日志设置了2GB的内存限制,如何验证?

【问题讨论】:

    标签: node.js logging


    【解决方案1】:

    --trace_gc V8 optionprocess.memoryUsage() 应该会给你很好的总体数字

    node --trace_gc --max_old_space_size=4096 -e '
      let a = []
      for( let i=1; i>0; i++){
        a.push({ a: "testing" })
        if ( i % 1000000 === 0 ) console.log("%j", process.memoryUsage())
        if ( i % 10000000 === 0 ) console.log(v8.getHeapSpaceStatistics())
      }
    '
    

    请注意,节点进程不会以设置的max_old_space_size 大小开始,但这将允许节点增长到该值。我不相信 V8 有像 Java VM 那样设置最小旧空间大小的概念。

    另请注意,其他内存空间,如“新”和可能的“外部”内存,在旧空间大小之上使用,因此您为max_old_space_size 设置的不是实际的操作系统进程内存限制。操作系统价值可能会再次更高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-11
      • 2016-08-23
      • 2012-09-05
      • 2020-05-16
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多