Javascript 服务器AWS上的node.js hapi.js套接字内存泄漏

Javascript 服务器AWS上的node.js hapi.js套接字内存泄漏,javascript,node.js,sockets,memory-leaks,hapijs,Javascript,Node.js,Sockets,Memory Leaks,Hapijs,我在AWS上有一堆服务器,它似乎在泄漏内存。heapdump显示,我在一个数组中不断增加套接字,这些套接字的对等方是位于服务器实例前面的ELB 每6秒进行一次健康检查 如果使用hapi.js,如何关闭这些套接字?如何修复此内存泄漏 const config = require('./config'); const Hapi = require('hapi'); const Path = require('path'); const Fs = require('fs'); server = n

我在AWS上有一堆服务器,它似乎在泄漏内存。heapdump显示,我在一个数组中不断增加套接字,这些套接字的对等方是位于服务器实例前面的ELB

每6秒进行一次健康检查

如果使用hapi.js,如何关闭这些套接字?如何修复此内存泄漏

const config = require('./config');
const Hapi = require('hapi');
const Path = require('path');
const Fs = require('fs');

server = new Hapi.Server({
  debug: { request: ['error'] },
  connections: {
    routes: {
      files: {
        relativeTo: Path.join(__dirname, 'public')
      }
    }
  }
})

var connectionDict = {
  port: config.port,
  host: config.host}

server.connection(connectionDict);
module.exports = server;

server.start(function () {
      setImmediate(function(){
        server.log([CONTROLLER_NAME, "server-start"], 'Server started at: ' + server.info.uri);
      });
    });

server.route({
  method: 'GET',
  path: '/',
  handler: function (request, reply) {
    return reply('Welcome to your API!\n').header("Connection","Close");
  }
});

setInterval(function (){
 global.gc();
}, 60000);
一个有趣的小道消息是,这个服务器实际上没有负载-唯一影响服务器的是ELBs

上面看到的套接字本质上是相同对等连接的重复。我不知道为什么服务器没有重用现有的套接字并创建新的套接字

回复上的.header似乎也没有任何作用。无论回流总管上是否有“连接:关闭”,插座都会泄漏

不幸的是,global.gc()也没有清理套接字

编辑 这并不重要,但我使用的是t2.micro实例

更简单的代码,仍在泄漏:

const Hapi = require('hapi');
const Fs = require('fs');

server = new Hapi.Server();
var connectionDict = {
  port: 8443,
  host: '0.0.0.0',
  tls: {
    key: Fs.readFileSync('./cert/https/projectchange.pem'),
    cert: Fs.readFileSync('./cert/https/projectchange.cert'),
    passphrase: 'somepassword'
    }
  }
server.connection(connectionDict);

server.route({
  method: 'GET',
  path: '/',
  handler: function (request, reply) {
    return reply('Welcome to Change API!\n').header("Connection","Close");
  }
});

server.start(function (err) {
  console.log('Server started');
});

require('heapdump');
Fs.readdirSync('.').map(function (filename) {
  if (filename.match(/^heapdump-/)) {
    console.log(filename);
    Fs.unlinkSync(filename);
  }
});
setInterval(function heapDumper() {
  process.kill(process.pid, 'SIGUSR2');
}, 60000);

我会在server.start之前调用server.route方法。还有,为什么在server.start之后调用setImmediate,然后不侦听server.start方法返回的错误。我在github上看到了您的问题,我认为您的问题是如何调用方法我进行了更改。没有区别。在github问题上发布您的代码,看看是否可以帮助您跟踪泄漏。我在hapi v16和node v9.2 Heapdump中看到此问题,显示套接字阵列正在不断增加。插座没有被释放