给出以下代码片段:
var request = require('request');
function getGoogle() {
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
//console.log(body) // Print the google web page.
}
});
}
setInterval(getGoogle, 1000);
使用节点版本0.10.17,此代码泄漏。有什么想法吗?
答案 0 :(得分:2)
我看到很多问题,人们会“忘记我的内心泄漏!”基于应用程序运行的前几分钟,无需等待进程达到上限或实际耗尽内存。节点只使用允许的内存量。
请参阅以下粗略基准。我运行你的代码(超时为100),内存使用量迅速增加到~70 MB,但随后停止了。第一列是内存使用情况。
27368 0:00.36 node test.js
40644 0:00.82 node test.js
47468 0:01.21 node test.js
48192 0:01.40 node test.js
67952 0:02.39 node test.js
69448 0:03.29 node test.js # Increasing fast til around here
70016 0:04.46 node test.js
70624 0:07.43 node test.js
70944 0:10.59 node test.js
71612 0:13.63 node test.js
73120 0:16.83 node test.js
70864 0:18.17 node test.js # Look it's decreasing
67780 0:42.27 node test.js # Considerably later it's even lower!
我想为什么会这样,因为垃圾收集很昂贵,但我不确定,如果有人有真正的解释和参考,我会很高兴。
答案 1 :(得分:1)
在这个页面(http://www.joyent.com/blog/walmart-node-js-memory-leak)中,他们实际上在Node.JS的http堆栈中发现了内存泄漏
好消息是它已在Node.JS版本v0.10.22中修复