相关疑难解决方法(0)

致命错误:CALL_AND_RETRY_LAST分配失败 - 处理内存不足

节点版本是 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 )
})
Run Code Online (Sandbox Code Playgroud)

要检查递归堆栈大小问题是否已使用--stack-size = 60000参数运行下一个代码

var depth = 0;

(function recurse() {
    // log at every 500 calls
    (++depth % 500) || console.log(depth);
    recurse();
})();
Run Code Online (Sandbox Code Playgroud)

并且有

264500 
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

然后我运行了代码,它给了我致命的错误:CALL_AND_RETRY_LAST分配失败 - 使用相同的--stack-size = 60000参数处理内存不足但没有得到Segmentation fault.

所以我总结CALL_AND_RETRY_LAST一下,递归堆栈大小并不常见. …

node.js

177
推荐指数
10
解决办法
18万
查看次数

Node.js"致命错误:JS分配失败 - 处理内存不足" - 可能获得堆栈跟踪?

嗯......我回到原点.我无法想象我的生活.

我收到以下错误:

FATAL ERROR: JS Allocation failed - process out of memory
Run Code Online (Sandbox Code Playgroud)

我可以列举几十个(是的,几十个)我试图找到这个问题根源的东西,但实际上它太过分了.以下是关键点:

  • 我只能在我的生产服务器上实现它,而且我的应用程序庞大而复杂,因此很难隔离
  • 即使堆大小和RSS大小都<200 Mb,也会发生这种情况,鉴于机器(Amazon Cloud,CentOS,m1.large)具有8Gb RAM,这应该不是问题

我的假设是(因为第二点),泄漏可能不是原因; 相反,似乎可能有一个非常大的SINGLE对象.以下线程支持这个理论:: 在Node.js中使用JSON.stringify导致'进程内存不足'错误

我真正需要的是一些方法来找出应用程序崩溃时内存的状态,或者可能是导致FATAL ERROR的堆栈跟踪.

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

node.js

54
推荐指数
4
解决办法
7万
查看次数

标签 统计

node.js ×2