如何解决node.js“;JavaScript内存不足”;问题

如何解决node.js“;JavaScript内存不足”;问题,node.js,Node.js,我正在Ubuntu 16.04服务器上运行node.js服务。我最近遇到了一个问题,在那里我得到了这个错误消息:“UFATAL error:CALL\u AND\u RETRY\u上次分配失败-JavaScript堆内存不足” 现在,我继续阅读这里的内容,这样我就可以使用类似于:node--max old space size=4096 yourFile.js的东西来解决这个问题,但是我不会那样启动我的服务,我使用supervisorctl start来启动服务。 所以,我不知道我该如何解决这个

我正在Ubuntu 16.04服务器上运行node.js服务。我最近遇到了一个问题,在那里我得到了这个错误消息:
“UFATAL error:CALL\u AND\u RETRY\u上次分配失败-JavaScript堆内存不足”

现在,我继续阅读这里的内容,这样我就可以使用类似于:
node--max old space size=4096 yourFile.js
的东西来解决这个问题,但是我不会那样启动我的服务,我使用
supervisorctl start
来启动服务。 所以,我不知道我该如何解决这个问题。
您能建议我该怎么做吗?

使用配置文件。应将其放置在如下位置:

/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
在其中添加running选项:

[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

与其增加堆大小,不如优化代码。在过去,当一些递归函数失去控制时,我遇到过这个问题,也许你可以开始看那里?我实际上没有递归代码,但我处理客户机请求,每秒可以收到数百个请求,此时你真的应该使用一组进程。这是第一个流程接受请求并将其分派给工作人员的地方。这与预处理Apache相同。您可以获得更多的堆空间,但您必须处理这样一个事实:您不能依赖于拥有单个共享堆。此解决方案是否取决于我的节点版本?2.它是否有默认的内存大小可供使用?我使用Grafana作为监视工具,在查看崩溃的时间戳后,我注意到内存使用量大约为7 GB,这非常奇怪……只要您的node.js支持
max old space size
选项,就可以了。默认内存限制为1GB。Idk关于7GB,除了node.js堆大小(限制为1GB)之外,还必须有其他内容。