gpt4 book ai didi

javascript - 几种情况下的nodejs内存泄漏

转载 作者:行者123 更新时间:2023-11-29 22:13:12 24 4
gpt4 key购买 nike

  1. 原始本地 tcp 服务器我用客户端测试代码并发长连接服务器,什么都不做。在 5w 次连接后我关闭了 client.js,但服务器端将有大约 100M 内存没有释放。

服务器代码:

var net = require('net');
var server = net.createServer(function(client) {
console.log('server connected');
client.on('data',function(){});
client.on('end',function(){console.log('end');});

});
server.listen(8124, function() {
console.log('server bound');
});

客户端代码:

var net = require('net');
var host = '192.168.0.110'
// var host = "localhost"
, port = 8124


for(var i=0; i < 50000; i++){
var client = net.connect({host: host, port: port},
function(i){
return function() { //'connect' listener
var num = i;
console.log('client connected ' + num);
}}(i)
);
client.on('end',function(){
console.log('end');
client.end()
})
}

客户端在另一台机器上

2、长循环

 var a = b = c = d = [];
console.log((process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2), 'Mb');

for(i=0;i<50000;i++){
a.push(new Date());
b.push(new Date());
c.push(new Date());
d.push(new Date());

}
console.log((process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2), 'Mb');
a = null;
b = null;
c = null;
d = null;

console.log('null');
console.log((process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2), 'Mb');

console.log((process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2), 'Mb');
setInterval(function(){
console.log((process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2), 'Mb');
},5000);

我将变量设置为 null 但内存没有释放。有人告诉我使用 process.nextTick 来防止长循环但它仍然不起作用。

最佳答案

释放引用并将其设置为 null 后,内存不会立即释放。如果你想在给定时刻强制执行 GC:

  1. 用 --expose-gc 启动 Node

node --expose-gc test.js

  1. 在您的代码中添加 gc 调用:

global.gc();

你不应该在生产中这样做,因为 V8 自己处理 GC 调用并且在这方面非常好。

关于javascript - 几种情况下的nodejs内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com