好我又回到原点了.我这辈子都搞不懂.

我发现以下错误:

FATAL ERROR: JS Allocation failed - process out of memory

我可以列举几十件(是的,几十件)我试图从根本上解决这个问题的事情,但真的太多了.以下是要点:

  • 我只能在我的生产服务器上实现,而且我的应用程序又大又复杂,所以很难隔离
  • 即使堆大小和;RSS大小都是<200 Mb,考虑到机器(Amazon Cloud、CentOS、m1.large)有8Gb内存,这应该不是问题

My assumption is that (because of the 2nd point), a leak is probably not the cause; rather, it seems like there's probably a SINGLE object that is very large. The following thread backs up this theory:: In Node.js using JSON.stringify results in 'process out of memory' error

我真正需要的是找出应用程序崩溃时内存的状态,或者可能是导致致命错误的堆栈跟踪.

根据我上面的假设,10分钟的堆转储是不够的(因为该对象不会驻留在内存中).

推荐答案

我必须给Trevor Norris on this one for helping to modify node.js itself提供巨大的支持,这样当这个错误发生时,它会自动生成一个堆转储.

不过,最终解决我这个问题的方法要平凡得多.我编写了一些简单的代码,将每个传入API请求的端点附加到日志(log)文件中.我等待收集约10个数据点(崩溃),并比较崩溃前60秒运行的端点.我发现在9/10的 case 中,只有一个端点在坠机前被击中.

从那时起,这只是一个深入挖掘代码的问题.我缩减了所有内容——从mongoDB查询返回的数据更少,只将必要的数据从一个对象传递回回调,等等.现在,我们比平均时间多了6倍,没有任何服务器发生一次崩溃,这使我有hope个问题得到了解决...现在.

Node.js相关问答推荐

GitLab SAST中的Nodejcan未找到匹配项

如何在Reaction应用程序中查看存储的斑点图像?

mongoose 模型填充问题

如何在 ElectronJS 中播放音频文件

如何获取mongoose中单个id数据的记录

Mongodb - 在数组数组中查找()

Promise 和 Azure 语音转文本

Node.js中使用ffmpeg如何获取视频截图的位置?

无法通过 NextJS 访问 HTTP 帖子中的正文

使用 fs.createWriteStream 将数据写入 bigquery (node.js) 时出现模式错误

mongoose.model() 方法返回未定义

Google Calendar API FreeBusy 外部用户

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

JavaScript & Node - 将图像文件保存到服务器但无法查看

如何正确使用 package.json 中的关键字属性?

npm install 给出警告,npm audit fix 不起作用

如何使用 cookie 创建 HTTP 客户端请求?

路由后的 Node Express 4 中间件

我可以让 node --inspect 自动打开 Chrome

在 Node.js 上使用 Connect 无法获取 /