Les descripteurs de sockets continuent à augmenter lorsque le rappel est appelé depuis un bloc d’erreur

J’exécute le code suivant

var pg = require('pg').native; async.waterfall([ function (callback) { //some code }, function (result,callback) { logger.debug('Async waterfall 2: Querying events.'); try { callingFirstEvent(queryMode, request, foundEvents, callback); } catch(ex) { logger.error('callingFirstEvent::Error occurred in async waterfall 2: ' + ex.message); } }, function (result, callback) { //some code }, ], function (err, res) { //some code } ); var callingFirstEvent = function (queryMode, request, foundEvents, callback) { var conSsortingngList = queryMode.conSsortingngList; var executeQuery = function (conSsortingng, limit, next) { pg.connect(conSsortingng, function(err, client, done) { //below error code is reason of increased socket descriptors if (err) { logger.error('callingFirstEvent : Cannot fetch a client from pool', err); next(null, limit); return; } client.query(sql, function (err, result) { done(); if (err) { logger.error('callingFirstEvent', err); logger.error('sql:' + sql); next(err, limit); return; } //some code }); // client.query }); // pg.connect }; // executeQuery var schedule = []; conSsortingngList.forEach(function (conSsortingng, index) { if (index == 0) { schedule.push(async.apply(executeQuery, conSsortingng, request.query.max)); } }); }; 

Lorsque la fonction callingFirstEvent est appelée depuis un modèle de cascade et si elle est bloquée dans le bloc d’erreur de callingFirstEvent

  if (err) { logger.error('callingFirstEvent : Cannot fetch a client from pool', err); next(null, limit); return; } 

descripteurs de socket augmentés.

Voici comment je vérifie le nombre total de descripteurs de socket

ls -ltr / proc / cat /path of pid / fd / | prise grep | wc -l

Comment fermer les descripteurs de socket après leur ouverture? ou y a-t-il un moyen de ne pas ouvrir ces sockets?

    Vous avez des fuites. La plupart des erreurs, en fait, à l’exception des délais de lecture, sont fatales au socket et devraient vous amener à le fermer.