NodeJS 和增加堆大小
NodeJS and increasing heap size
我想确保可用堆大小(我的 NodeJS 应用程序可以使用)始终设置为最大值。
据我了解,当您 运行 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" 计数器,它不断增加。
我想确保可用堆大小(我的 NodeJS 应用程序可以使用)始终设置为最大值。
据我了解,当您 运行 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" 计数器,它不断增加。