【问题标题】:NodeJS - FATAL ERROR: CALL_AND_RETRY_LAST Allocation failedNodeJS - 致命错误:CALL_AND_RETRY_LAST 分配失败
【发布时间】:2018-06-17 05:50:18
【问题描述】:

我遇到了这个问题...我使用的是 Windows 7 和 Chrome。

我已经尝试过这个解决方案: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

但是没有用。

也试过这个: Devextreme : FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

但我找不到那个文件,就像它不存在一样。

  1. 我正在尝试做this 教程。

  2. 我正在执行的代码是这样的:

var http = require("http"),
fs = require("fs");        

http.createServer(function(req, res){

    fs.readFile("./index_ASYNC.html", function(err, html){    
        var i=0;

        while(true) {    
            i++;    
            res.write(i+""); // Envía respuestas al navegador.
        }

        // res.writeHead(200,{"Content-Type":"text/html"});
        res.end();
    });

}).listen(8080);
  1. 我使用 node hola_html.js 执行它。

  2. 产生的错误:

[5344:00000000002C05B0] 46772 毫秒:标记扫描 1399.5 (1427.9) -> 1399.5 (1427. 9) MB, 2231.9 / 0.0 ms 分配失败 GC 在旧空间请求 [5344:00000000002C05B0] 49806 ms: 标记扫描 1399.5 (1427.9) -> 1399.5 (1426. 9) MB, 2583.4 / 0.0 ms 最后的 GC in 请求旧空间 [5344:00000000002C05B0] 52394 毫秒:标记扫描 1399.5 (1426.9) -> 1399.5 (1426. 9) MB, 2588.3 / 0.0 ms 最后手段 GC 在旧空间中请求

==== JS 堆栈跟踪 ========================================== =

安全上下文:0000028BF5325EE1 1: _send [_http_outgoing.js:~216] [pc=0000002FDD52590C](this=000000B79B184D2 1 ,data=000003BB18D85CB1 ,encoding=0000010C6FF02201 ,callback=0000010C6FF02201 ) 2: /* 匿名 */ [C:\Leo\Prodigios\CursoNodeJS\4-encabezados\hola_html_ASY NC_v2.js:~10] [pc=0000002FDD5131F2](这=00000191E280BE21

致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆 内存不足

  1. 我必须补充一下,我尝试了在 Internet (Devextreme : FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory) 上找到的第二个选项,但没有成功。

【问题讨论】:

  • 您需要提供示例您尝试过的内容、确切的错误以及可能如何重现
  • 已编辑:D。谢谢

标签: javascript node.js memory-leaks mean-stack


【解决方案1】:

显然这个例子会导致内存泄漏,这行导致它:

while(true) {    
   i++;    
   res.write(i+""); // Envía respuestas al navegador.
}

您在这里循环无限增加i 并多次写入输出(您应该只写入一次)。

垃圾收集器没有时间来处理这个问题,你的 RAM 很快就会达到极限

我不懂这个视频中的语言,但我相信作者警告过这种方法。

示例应用程序可能如下所示:

var http = require('http'); // import module
http.createServer(function (req, res) { // create http server
  // create header to let browser know what content you are trying to send
  res.writeHead(200, {'Content-Type': 'text/plain'});
  // write string to client
  res.write('Hello World!');
  // end the request
  res.end();
}).listen(8080); // listen to requests on http://localhost:8080

我在您的教程中看到了更复杂的示例,例如4:25

【讨论】:

  • 我可以理解,做一个无限循环会使程序不停地......因为是“无限”xD。但我想知道他为什么这样做......我会问youtuber为什么......我没有问他,因为看起来他没有回答太多......无论如何,非常感谢。如果他在 1 周内没有回复我,我会给你的答案是有效的。
  • There is no time for garbage collector to pick this up。我觉得这是一个不正确的说法。 GC 不会等待主线程暂停(AFAIK)您的问题可能与此有关 - github.com/nodejs/node/issues/2970#issuecomment-141819829
  • 这里没有控制台。我没有说它也等待事件循环为空。应用程序溢出如此之快,以至于 GC 无法处理,仅此而已。
猜你喜欢
  • 2018-09-25
  • 1970-01-01
  • 2016-12-19
  • 2014-11-23
  • 2019-06-28
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2020-06-08
相关资源
最近更新 更多