NodeJS 和增加堆大小

NodeJS and increasing heap size

  1. 我想确保可用堆大小(我的 NodeJS 应用程序可以使用)始终设置为最大值。

  2. 据我了解,当您 运行 NodeJS 10 及更高版本时,不再需要设置“--max_old_space_size”...?

无论我 运行 我的节点应用在哪里 - 我检查堆大小都在 35MB - 40MB 之间。 我的笔记本电脑有 32GB 内存,我的小型 AWS 实例有 1GB - 但两者似乎分配和使用相同的小堆大小(old_space 37MB/37072896(1GB)和 35MB/35270656(32GB))?

我试过使用和设置“--max_old_space_size=1000000” - 但似乎没有任何效果?

const v8 = require('v8');
console.log(v8.getHeapSpaceStatistics());

1.AWS 具有 1GB 内存的实例:

[
  {
    space_name: 'read_only_space',
    space_size: 262144,
    space_used_size: 32296,
    space_available_size: 229576,
    physical_space_size: 262144
  },
  {
    space_name: 'new_space',
    space_size: 8388608,
    space_used_size: 1995376,
    space_available_size: 2194576,
    physical_space_size: 8388608
  },
  {
    space_name: 'old_space',
    space_size: 37072896,
    space_used_size: 35261192,
    space_available_size: 1746800,
    physical_space_size: 37072896
  },
  {
    space_name: 'code_space',
    space_size: 425984,
    space_used_size: 296192,
    space_available_size: 70048,
    physical_space_size: 425984
  },
  {
    space_name: 'map_space',
    space_size: 1576960,
    space_used_size: 1272080,
    space_available_size: 300656,
    physical_space_size: 1576960
  },
  {
    space_name: 'large_object_space',
    space_size: 1720320,
    space_used_size: 1700944,
    space_available_size: 0,
    physical_space_size: 1720320
  },
  {
    space_name: 'code_large_object_space',
    space_size: 49152,
    space_used_size: 3552,
    space_available_size: 0,
    physical_space_size: 49152
  },
  {
    space_name: 'new_large_object_space',
    space_size: 0,
    space_used_size: 0,
    space_available_size: 4189952,
    physical_space_size: 0
  }
]

2.MY 32GB 内存笔记本电脑:

[
  {
    space_name: 'read_only_space',
    space_size: 262144,
    space_used_size: 33040,
    space_available_size: 0,
    physical_space_size: 262144
  },
  {
    space_name: 'new_space',
    space_size: 33554432,
    space_used_size: 16417832,
    space_available_size: 340952,
    physical_space_size: 33554432
  },
  {
    space_name: 'old_space',
    space_size: 35270656,
    space_used_size: 35127408,
    space_available_size: 50416,
    physical_space_size: 35270656
  },
  {
    space_name: 'code_space',
    space_size: 692224,
    space_used_size: 451296,
    space_available_size: 14304,
    physical_space_size: 692224
  },
  {
    space_name: 'map_space',
    space_size: 1839104,
    space_used_size: 1817840,
    space_available_size: 0,
    physical_space_size: 1839104
  },
  {
    space_name: 'large_object_space',
    space_size: 3067904,
    space_used_size: 3045496,
    space_available_size: 0,
    physical_space_size: 3067904
  },
  {
    space_name: 'code_large_object_space',
    space_size: 49152,
    space_used_size: 2784,
    space_available_size: 0,
    physical_space_size: 49152
  },
  {
    space_name: 'new_large_object_space',
    space_size: 1523712,
    space_used_size: 1515104,
    space_available_size: 15243680,
    physical_space_size: 1523712
  }
]

我的经验:

我意识到 Node 实际上会自动增加堆大小(并且它确实按预期工作)。所以除非堆大小填满了你所有的内存 - 你都很好。

我还意识到我有内存泄漏(我的节点应用程序打开了许多网络套接字连接的方式 - 而不是重置现有的连接)。我通过 运行 通过 PM2 的 Node 应用程序找到了这个 - 它有内置的 "active handlers" 计数器,它不断增加。