I've created a simple nodejs server and client. They interact with each other via 15000 tcp sockets.
client code:
'use strict';
const net = require('net');
for (let i = 0; i < 15000; ++i) {
let socket = new net.Socket();
socket.connect(6000, '127.0.0.1', () => {
console.log('Connected');
socket.write('data to server');
});
socket.on('data', data => {
console.log(data);
});
socket.on('close', () => {
console.log('Connection closed');
});
}
server code:
'use strict';
const net = require('net');
let sockets = [];
let server = net.createServer(socket => {
socket.write('blabla from server');
socket.on('data', data => {
console.log(data);
});
sockets.push(socket);
if (sockets.length >= 15000) {
setTimeout(() => {
console.log('cleanup start');
for (let socket of sockets) {
socket.end();
socket.destroy();
socket.unref();
}
console.log('cleaned up and ready');
}, 80000);
}
});
if (global.gc) {
setInterval(() => {
global.gc();
}, 15000);
}
setInterval(() => {
console.log(process.memoryUsage());
}, 5000);
server.listen(6000, '127.0.0.1');
They send and receive messages. During creation of sockets the memory usage gets high. But after destroying the sockets I expect the memory usage to get low, which doesn't happen.