Hello,
Background
We are using needle in one of our projects and we have noticed a slow but steady increase in the tcp memory buffers. The linux command used to view the tcp memory pages allocation is cat /proc/net/sockstat.
Every time we killed the service, the memory consumption dropped significantly so we started digging.
Before kill:

After kill:

After plenty of tests we started noticing that the needle streams we use, do not fire the close event. Now, I am not sure where exactly the problem is, but if the close event does not fire, it means that the underlying resources have not been destroyed. If they are not getting destroyed than that is consistent with the tcp memory pages increase we have been seeing.
How to reproduce
The following sample code shows the problem:
const needle = require('needle');
const {pipeline} = require('stream');
const {createWriteStream} = require('fs');
const url = 'https://releases.ubuntu.com/21.04/ubuntu-21.04-desktop-amd64.iso.torrent';
const readStream = needle.get(url);
readStream.on('end', () => console.log('needle END event fired')); // FIRES JUST FINE
readStream.on('close', () => console.log('needle CLOSE event fired')); // DOES NOT FIRE
const writeStream = createWriteStream('ubuntu-21.04-desktop-amd64.iso.torrent');
pipeline(readStream, writeStream, (error) => {
if (error) {
console.log(error);
}
// By uncommenting the next line, the CLOSE event WILL fire, but it shouldn't be required.
// readStream.destroy();
});
Environment
node.js version: v12.16.1
needle version: v2.8.0
Please let me know if I can help in any other way to get to the bottom of this. Thank you for your time.
Hello,
Background
We are using
needlein one of our projects and we have noticed a slow but steady increase in the tcp memory buffers. The linux command used to view the tcp memory pages allocation iscat /proc/net/sockstat.Every time we killed the service, the memory consumption dropped significantly so we started digging.
Before kill:
After kill:
After plenty of tests we started noticing that the needle streams we use, do not fire the
closeevent. Now, I am not sure where exactly the problem is, but if thecloseevent does not fire, it means that the underlying resources have not been destroyed. If they are not getting destroyed than that is consistent with the tcp memory pages increase we have been seeing.How to reproduce
The following sample code shows the problem:
Environment
node.js version: v12.16.1needle version: v2.8.0Please let me know if I can help in any other way to get to the bottom of this. Thank you for your time.