У меня есть приложение, которое каждые 15 секунд проверяет наличие новых записей в DB2 на iSeries, используя IBM idb-connector .У меня есть асинхронные функции, которые возвращают результат запроса в socket.io, который генерирует событие с данными, включенными в интерфейс.Я сузил утечку памяти до асинхронных функций.Я прочитал несколько статей об общих причинах утечки памяти и о том, как их диагностировать.
MDN: управление памятью
Rising Stack: объяснение сбора мусора
Marmelab: узел поиска и исправления.Утечки памяти: практическое руководство
Но я до сих пор не вижу, в чем проблема.Кроме того, я не могу получить разрешение на установку node-gyp в системе, что означает, что большинство инструментов управления памятью недоступны для установки, например memwatch, heapdump и т. Д. Для установки требуется node-gyp.Вот пример того, какова основная структура функций.
const { dbconn, dbstmt } = require('idb-connector');// require idb-connector
async function queryDB() {
const sSql = `SELECT * FROM LIBNAME.TABLE LIMIT 500`;
// create new promise
let promise = new Promise ( function(resolve, reject) {
// create new connection
const connection = new dbconn();
connection.conn("*LOCAL");
const statement = new dbstmt(connection);
statement.exec(sSql, (rows, err) => {
if (err) {
throw err;
}
let ticks = rows;
statement.close();
connection.disconn();
connection.close();
resolve(ticks.length);// resolve promise with varying data
})
});
let result = await promise;// await promise
return result;
};
async function getNewData() {
const data = await queryDB();// get new data
io.emit('newData', data)// push to front end
setTimeout(getNewData, 2000);// check again in 2 seconds
};
Есть идеи о том, где утечка?Я использую async / await неправильно?Или же я неправильно создаю / уничтожаю соединения с БД?Любая помощь в выяснении, почему этот код является утечкой, будет высоко оценена !!
Редактировать: Забыл упомянуть, что у меня ограниченный контроль над бэкэнд-процессами, так как они обрабатываются другой командой.Я только извлекаю данные, которыми они заполняют БД, и добавляю их на веб-страницу.
Редактировать 2: Я думаю, что я сузил его до того, что соединения с БД не очищаются должным образом.Но, насколько я могу судить, я следовал инструкциям, предложенным на их github repo .