Reusing HTTP connection lead to no destroy triggered
-
Version:
v8.9.0
-
Platform:
Linux cms-03 4.4.0-1052-aws #61-Ubuntu SMP Mon Feb 12 23:05:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
-
Subsystem:
NaN
poc.js
:
const http = require('http');
const agent = new http.Agent({
keepAlive: true
});
function get(id) {
http.get({
host: 'www.google.com',
path: '/generate_204',
agent
}, () => {
console.log('get response #' + id);
});
}
for (let i = 0; i < 5; i++) {
get(i);
}
run it with why-is-node-running
:
$ why-is-node-running poc.js
probing program /root/poc.js
kill -SIGUSR1 32671 for logging
get response #0
get response #4
get response #3
get response #1
get response #2
There are 11 handle(s) keeping the process running
# SIGNALWRAP
/usr/lib/node_modules/why-is-node-running/include.js:3 - process.on('SIGUSR1', function() { why() })
# TCPWRAP
/root/poc.js:8 - http.get({
# TCPWRAP
/root/poc.js:8 - http.get({
# TCPWRAP
/root/poc.js:8 - http.get({
# TCPWRAP
/root/poc.js:8 - http.get({
# TCPWRAP
/root/poc.js:8 - http.get({
# HTTPPARSER
(unknown stack trace)
# HTTPPARSER
(unknown stack trace)
# HTTPPARSER
(unknown stack trace)
# HTTPPARSER
(unknown stack trace)
# HTTPPARSER
(unknown stack trace)
if there are requests to the same endpoint, the socket never closed and those destroy
s never get called.
old description
Hi team,
Thanks for the awesome job!
I am using the async_hooks in our production, but I've found some memory issue that possible related to async_hooks.
For debugging, I created a counter variable:
And I got the following chart for the past 1.5 days (2018-04-05T13:06:12.724Z to 2018-04-06T22:46:53.753Z)
As check with pm2 info, the the chart above drop down to 0 is the time pm2 when restart the application.
And here is the memory usage:
As comparing, this is what the memory looks like one week before:
Our application is a web service running on top of restify.
The memory is consumption may beyond your expectation, it's because of I am holding some resource after init is called and those resource's releasing require destroy to be called.
Any ideas?