【问题标题】:How to solve node.js “JavaScript heap out of memory” problem?如何解决 node.js “JavaScript heap out of memory” 问题?
【发布时间】:2019-06-18 01:00:14
【问题描述】:

我正在我的 Ubuntu 16.04 服务器上运行 node.js 服务。我最近遇到了一个问题,我收到以下错误消息:"UFATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory"

现在,我读到这里,我可以使用类似的东西:node --max-old-space-size=4096 yourFile.js 来解决这个问题,但是我不会那样启动我的服务,我使用 supervisorctl start <servicename> 来启动服务。 所以,我不确定如何解决我的问题。 你能建议我该怎么做吗?

【问题讨论】:

  • 可能值得优化代码而不是增加堆大小。过去,当某些递归函数失控时,我遇到过这个问题,也许您可​​以开始寻找那里?
  • 我这里其实没有递归代码,但是我处理的是客户端请求,每秒最多可以收到几百个请求
  • 那时你真的应该使用一个进程集群。这是第一个进程接受请求并将它们分派给工作人员的地方。这与预分叉 Apache 相同。您可以获得更多堆空间,但您必须处理不能依赖于单个共享堆的事实。

标签: node.js


【解决方案1】:

supervisorctl 使用一个配置文件。它应该放在类似的地方:

/etc/supervisor/conf.d/myapi.conf

看起来像:

[program:my-api]
command=node /home/myuser/myapi/app.js
autostart=true
autorestart=true
environment=NODE_ENV=production
stderr_logfile=/var/log/myapi.err.log
stdout_logfile=/var/log/myapi.out.log
user=myuser

在其中添加运行选项:

[program:my-api]
command=node --max-old-space-size=4096 /home/myuser/myapi/app.js
autostart=true
autorestart=true
environment=NODE_ENV=production
stderr_logfile=/var/log/myapi.err.log
stdout_logfile=/var/log/myapi.out.log
user=myuser

【讨论】:

  • 1.此解决方案是否取决于我的节点版本? 2. 是否有默认内存大小可供使用?我使用 Grafana 作为监控工具,查看崩溃的时间戳后发现内存使用量大约为 7 GB,这很奇怪...
  • 只要你的 node.js 支持 max-old-space-size 选项就可以了。默认内存限制为 1GB link。 Idk 关于你的 7GB,除了 node.js HEAP SIZE 限制为 1GB 之外,肯定还有其他东西。
猜你喜欢
  • 2022-12-12
  • 2020-09-24
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2022-01-22
  • 2019-06-23
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多