NodeJS - 致命错误:CALL_AND_RETRY_LAST分配失败

时间:2018-01-08 09:08:43

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

我遇到了这个问题......我正在使用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. 我正在执行的代码是:

  3. 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. 我使用节点hola_html.js 执行它。

    2. 产生的错误:

    3.   

      < ---最后几个GC --->

           

      [5344:00000000002C05B0] 46772 ms:标记扫描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 ms:标记扫描   1399.5(1426.9) - > 1399.5(1426.9)MB,2588.3 / 0.0 ms最后请求旧空间GC

           

      < --- JS stacktrace --->

           

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

           

      安全上下文:0000028BF5325EE1       1:_send [_http_outgoing.js:~216] [pc = 0000002FDD52590C](此= 000000B79B184D2 1,数据= 000003BB18D85CB1,编码= 0000010C6FF02201,回调= 0000010C6FF02201< null>)       2:/ *匿名* / [C:\ Leo \ Prodigios \ CursoNodeJS \ 4-encabezados \ hola_html_ASY   NC_v2.js:~10] [pc = 0000002FDD5131F2](这= 00000191E280BE21      

      致命错误:CALL_AND_RETRY_LAST分配失败 - JavaScript堆   没有备忘录

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

1 个答案:

答案 0 :(得分:0)

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

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