创建了一个服务,功能只是坚挺了一个端口,我没10秒输出一次内存,发现内存不停的涨,偶尔下去一点点,后又上来了。不知道如何解决
var mNet = require('net');
var mCpuCount = require('os').cpus().length;
var mCluster = require('cluster');
var mLogo=require('../logs/log_system');
var mPackageSystem=require('../shared/packageSystem');
function GameMain(aPort){
if(mCluster.isMaster==true){
mNet.createServer(function(sock){
console.log('连接');
sock.on('data', function(data) {
});
/** 断开连接*/
sock.on('close', function(data) {
console.log("断开后");
});
sock.on('error', function(error) {
});
}).listen(aPort);
console.log("game_server starting port:"+aPort);
}
}
代码是全的。 if(mCluster.isMaster==true)这个只是判断了一下,没有启动子进程。 测试过程就是 打开服务监听,启动的时候内存大概是16000左右,连接了1000个长连接,每个连接一直发送128K的数据,此时内存大概会在21000左右,断开连接后,内存还是21000左右,并没有随着我的断开连接恢复到16000左右
补充下,测试过程 if(mCluster.isMaster==true)这个只是判断了一下,没有启动子进程。 测试过程就是 打开服务监听,启动的时候内存大概是16000左右,连接了1000个长连接,每个连接一直发送128K的数据,此时内存大概会在21000左右,断开连接后,内存还是21000左右,并没有随着我的断开连接恢复到16000左右
不知道lz的测试方法是怎么样的,使用lz提供代码作为服务, 以下测试代码在测试过程中及中断测试后查看内存均有明显变化, 测试时每个连接发送消息大小512k,以下代码中消息数据请自行添加。
var mNet = require('net');
var tm = require('timers');
var times = 0;
// 每10毫秒增加一个连接,直到1000个
tm.setInterval(function () {
times += 1;
if(times < 1000) {
var socket = new mNet.Socket();
socket.connect(3000);
var data = '请按需添加指定大小数据量';
socket.write(data);
}
}, 10);
// 每秒输出内存占用信息
tm.setInterval(function () {
var mem = process.memoryUsage();
console.log('phy mem: ' + mem.rss + '; heap: ' + mem.heapTotal + '(' + (Math.ceil(mem.heapUsed/mem.heapTotal*1000) / 10) + '%)');
}, 1000);
昨天晚上挂了一夜,开了3台机器,连接数加到了1500。 三台机器最少每秒发送28K数据,最大发送128K数据 数据如下 刚启动的时候 [2013-05-21 21:36:42.244] [INFO] log -23912448 然后每10秒log一次内存到在今天早上 [2013-05-22 07:06:31.561] [INFO] log - 58814464 [2013-05-22 07:06:41.560] [INFO] log - 58834944 [2013-05-22 07:06:51.563] [INFO] log - 58834944 [2013-05-22 07:07:01.559] [INFO] log - 58834944 [2013-05-22 07:07:11.571] [INFO] log - 58834944 [2013-05-22 07:07:21.570] [INFO] log - 58834944 关闭连接后依旧保持这些内存无变化。
也就是说,每次连接都会有内存释放不掉。这样反反复复的内存早晚要溢出的。
1500连接?再多点,上万,然后连接=》发数据=》断开=》连接=》发数据=》断开,如此往复多次…… 可以参考一下这个:http://cnodejs.org/topic/50e5900da7e6c6171a0159d7,我目前自己做长连接服务的测试结果大概是,每连接10K内存,没有内存泄露问题(你的代码也不像有。。)