У меня есть следующий код, эта функция вызывается миллионы раз, чтобы получить определенное поле продукта в базе данных mongo:
const mongo = require('mongodb').MongoClient
const defaultQueryProjection = {
_id: 0,
sku: 1,
category: 1
}
let DB_SERVERS;
let username;
let password;
let database;
function anotherFunctionThatInitsTheAboveVariables(){
...
}
async function getCategoryBySkuArray(skus){
let client;
try {
const dbFields = [
"category"
];
// Connect to DB
const connectionUrl =
`mongodb://${username}:${password}@${DB_SERVERS.join(',')}/?authSource=${database}`;
client = await mongo.connect(connectionUrl, {
useNewUrlParser: true,
readPreference: 'secondaryPreferred',
replicaSet,
reconnectTries: 10,
reconnectInterval: 300
});
let productsData;
const db = client.db(database);
// Query DB
const queryProjection = {
...defaultQueryProjection,
...dbFields.reduce((projection, property) => ({ ...projection, [property]: 1}), {})
};
productsData = await db.collection('products')
.find({sku: {$in: skus}}, {projection: queryProjection})
.toArray();
if(client){
await client.close();
console.log('Client closed');
}else{
console.log('Client did not close');
}
return productsData;
} catch (error) {
if(client){
await client.close();
console.log('Client closed');
} else {
console.log('Client not closed on exception');
}
console.log(error);
}
}
Теперь я запускаю приложение nodejs на pm2. Я замечаю, что активныйДескрипторы продолжают увеличиваться, не уменьшаясь, я выполнил следующую команду:
lsof -i -n -P и проверил, существует ли множество TCP-соединений с моими базами данных mongodb, которые не закрываются, почему это происходит?
У кого-нибудь есть подсказка?Спасибо!