当前位置: 首页 > 知识库问答 >
问题:

致命错误:CALL_AND_RETRY_LAST分配失败-进程内存不足

周和歌
2023-03-14

节点版本为v0.11.13

根据sudo top在崩溃期间内存使用率不会超过3%

再现此错误的代码:

var request = require('request')
var nodedump = require('nodedump')

request.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2",function(err,res)
{
    var data
    console.log( "Data received." );
    data = JSON.parse(res.body)
    console.log( "Data parsed."   );
    data = nodedump.dump(data)
    console.log( "Data dumped."   ); 
    console.log( data )
})

为了检查是否存在递归堆栈大小问题,我使用-stack-size=60000参数运行了下一段代码

var depth = 0;

(function recurse() {
    // log at every 500 calls
    (++depth % 500) || console.log(depth);
    recurse();
})();

并且得到了

264500 
Segmentation fault

然后我运行的代码给出了一个致命的错误:CALL_AND_RETRY_LAST Allocation失败-进程内存不足,具有相同的-stack-size=60000参数,并且没有segmentation fault

因此我得出结论call_and_retry_last与递归堆栈大小没有共同之处。

我该怎么解决这个问题呢?我相信我的计算机上有足够的空闲内存来成功地完成这项任务。

关于stackoverflow也有类似的问题,但这些问题都不是关于call_and_retry_last的,这就是我创建单独问题的原因。

共有3个答案

贺聪
2023-03-14

要解决这个问题,您需要通过使用--max_old_space_size选项来增加内存限制来运行应用程序。默认情况下,Node.js的内存限制为512 MB。

node --max_old_space_size=2000  server.js 
明阳旭
2023-03-14
$ sudo npm i -g increase-memory-limit

从项目的根位置运行:

$ increase-memory-limit

该工具将在node_modules/.bin/*文件中的所有节点调用中追加-max-old-space-size=4096。

node.js版本>=8-弃用通知

从NodeJSV8.0.0开始,就可以使用--max-old-space-size选项。NODE_OPTIONS=选项...

$ export NODE_OPTIONS=--max_old_space_size=4096
樊俊悟
2023-03-14

根据我的经验,如果您试图解析一个巨大的JSON对象,就会发生这种情况,但当我试图用JSON和Node0.11.13解析您的输出时,它就能正常工作。

您不需要更多的--stack-size,而是需要更多的内存:--max_new_space_size和/或--max_old_space_size

除此之外,我能给您的唯一提示是尝试另一个JSON-parser和/或尝试将输入格式更改为JSON行,而不是仅JSON。

 类似资料:
  • <---JS StackTrace---> =====JS栈迹=================================================================== 安全上下文:0369632D1:create(This=036856A9)2:_Walk[034841A1:~764][PC=1CCAED1F](This=3A11A619,Visitor=3BCEFD

  • 我尝试了这个解决方案:致命错误:CALL_AND_RETRY_LAST分配失败-进程内存不足 但不管用。 还尝试了其他:Devextreme:致命错误:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足 产生的错误: <---最后几个GC--> [5344:00000000002C05B0]46772 ms:Mark-sweep 1399.5(1427.9)->1399

  • 问题内容: 节点版本为 崩溃期间的内存使用情况未超出 产生此错误的代码: 要检查是否存在递归堆栈大小问题,我使用–stack-size = 60000参数运行了下一个代码 并得到了 然后,我运行了导致严重错误的代码:CALL_AND_RETRY_LAST分配失败-使用相同的–stack-size = 60000参数处理内存不足,并且没有得到。 因此,我得出结论与递归堆栈大小没有共同之处。 我该如何

  • 问题内容: 好吧…我回到正题。我无法一生解决这个问题。 我收到以下错误: 我可以列举出数十种(是的,数十种)我试图找出这个问题根源的东西,但实际上这太过分了。所以这是关键点: 我只能在生产服务器上实现它,而且我的应用程序又大又复杂,因此事实证明很难隔离它 即使堆大小和RSS大小均小于200 Mb,也会发生这种情况,考虑到机器(Amazon Cloud,CentOS,m1.large)具有8Gb R

  • 问题内容: 用户在我的网站上上传图像时出现此错误。 错误消息是“ PHP致命错误:/ home中内存不足(已分配80740352)(试图分配12352字节).....”如何使用php.ini解决此问题? 这是我当前的上传php.ini设置 任何想法我还需要添加什么来解决此错误? 问题答案: 最佳值取决于您对上传文件的处理方式。您是否使用file_get_contents或GD库将文件读入内存?在这