现在我在Paas平台下使用node.js,容器有内存限制,现在我想得到node.js应用程序的最大堆大小,我知道使用参数“--max-old-space-size”,我可以设置最大堆大小,但是我想知道如何得到“--max-old-space-size”的默认值,例如,如果容器的内存是512 m,所以node.js堆大小的最大值不能大于它,我怎么才能得到这个值呢?
q1qsirdb1#
您可以尝试使用v8模块,它的文档如下:https://nodejs.org/api/v8.html我相信getHeapStatistics()函数会给予你所需要的一切
v8
getHeapStatistics()
sycxhyv72#
您可以使用process.memoryUsagehttps://nodejs.org/api/process.html#process_process_memoryusage
process.memoryUsage
x4shl7ld3#
我认为这是不可能的。V8没有通过它的API公开这些信息。通过node:v8库获得的信息不包括“最大旧空间大小”,与可接受的答案相反。从getHeapStatistics()返回的信息只包含total_heap_size。getHeapSpaceStatistics()(注意方法名中的“Space“)可能包含所需的信息,但据我所知,它也只是运行时信息,space_available_size可能不反映max-old-space-size的隐式设置。Node存储库中有an issue,可以向docs添加关于一般堆大小的简单说明,但它仍然没有得到解决。我找到了V8源代码中计算默认值的部分,但是我很难理解它,也很难用更简单的伪代码来解释它,也许有人会觉得它很有用:
node:v8
total_heap_size
getHeapSpaceStatistics()
Space
space_available_size
max-old-space-size
// Initialize max_old_generation_size_ and max_global_memory_. { size_t max_old_generation_size = 700ul * (kSystemPointerSize / 4) * MB; if (constraints.max_old_generation_size_in_bytes() > 0) { max_old_generation_size = constraints.max_old_generation_size_in_bytes(); } if (v8_flags.max_old_space_size > 0) { max_old_generation_size = static_cast<size_t>(v8_flags.max_old_space_size) * MB; } else if (v8_flags.max_heap_size > 0) { size_t max_heap_size = static_cast<size_t>(v8_flags.max_heap_size) * MB; size_t young_generation_size = YoungGenerationSizeFromSemiSpaceSize(max_semi_space_size_); max_old_generation_size = max_heap_size > young_generation_size ? max_heap_size - young_generation_size : 0; } max_old_generation_size = std::max(max_old_generation_size, MinOldGenerationSize()); max_old_generation_size = std::min(max_old_generation_size, AllocatorLimitOnMaxOldGenerationSize()); max_old_generation_size = RoundDown<Page::kPageSize>(max_old_generation_size); max_global_memory_size_ = GlobalMemorySizeFromV8Size(max_old_generation_size); set_max_old_generation_size(max_old_generation_size); }
3条答案
按热度按时间q1qsirdb1#
您可以尝试使用
v8
模块,它的文档如下:https://nodejs.org/api/v8.html我相信
getHeapStatistics()
函数会给予你所需要的一切sycxhyv72#
您可以使用
process.memoryUsage
https://nodejs.org/api/process.html#process_process_memoryusagex4shl7ld3#
我认为这是不可能的。V8没有通过它的API公开这些信息。
通过
node:v8
库获得的信息不包括“最大旧空间大小”,与可接受的答案相反。从getHeapStatistics()
返回的信息只包含total_heap_size
。getHeapSpaceStatistics()
(注意方法名中的“Space
“)可能包含所需的信息,但据我所知,它也只是运行时信息,space_available_size
可能不反映max-old-space-size
的隐式设置。Node存储库中有an issue,可以向docs添加关于一般堆大小的简单说明,但它仍然没有得到解决。
我找到了V8源代码中计算默认值的部分,但是我很难理解它,也很难用更简单的伪代码来解释它,也许有人会觉得它很有用: