首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我将节点裁剪为512 max容器,为什么-max_old_space_size 460?

问如果我将节点裁剪为512 max容器,为什么-max_old_space_size 460?
EN

Stack Overflow用户
提问于 2017-09-02 21:28:44
回答 1查看 622关注 0票数 2

我有一个在heroku上运行的快速应用程序。

我希望优化垃圾收集。

heroku的医生说:

节点默认为长寿命对象设置1.5GB的限制。如果这超出了dyno可用的内存,Node可能允许应用程序开始将内存分页到磁盘。

要获得对应用程序垃圾收集器的更多控制,可以向Procfile中的基础V8 JavaScript引擎提供标志:

代码语言:javascript
复制
web: node --optimize_for_size --max_old_space_size=920 server.js

如果要将节点裁剪为512 MB的容器,请尝试:

代码语言:javascript
复制
web: node --optimize_for_size --max_old_space_size=460 server.js

如果容器是512 is,为什么--max_old_space_size是460而不是512?

这是如何工作的,这是否适合生产?

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 10:31:34

垃圾收集非常复杂,有一些复杂的内存管理算法用于收集和清理堆内存。JavaScript堆是为了应对日益增长的需求而逐步增长的。如果达到允许的堆内存大小,node.js将错误退出。

以下命令参数为:

  • optimize_for_size --使算法能够更经常地优化堆内存大小,该进程利用更多的CPU资源,通过清理旧堆空间(包括指针、数据等)来保持较小大小的垃圾。
  • max_old_space_size -默认情况下,Node.js (最多11.x )在32位和64位平台上使用最大堆大小分别为700 on和1400 on。因为v12.7 node.js支持容器环境上更好的堆大小分配。

根据可用内存配置堆大小可以确保Node.js不会尝试使用比可用内存更多的内存,并在内存耗尽时终止。

我建议生产node.js环境:

  • 安装node.js重新启动策略,以防应用程序意外崩溃
  • 在投入生产之前,使用参数--优化_for_size打开和关闭参数来评估app在负载上的性能
  • 准备对Node.js应用程序进行尸检分析。
  • 持续监视node.js应用程序的性能和资源使用情况
  • 保持node.js和模块的更新,定期评估应用程序中所有已使用模块上github上的漏洞和当前问题

使用最佳实践和故事来评估生产上的最佳解决方案,例如:https://developer.ibm.com/languages/node-js/articles/nodejs-weather-company-success-story/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46018365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档