Утечка памяти ExpressJS, вызванная использованием закрытия? - PullRequest
0 голосов
/ 12 ноября 2018

Я только что узнал о закрытии в JS и взволнован, чтобы попробовать его в моем проекте. Я написал следующий код для проверки времени на предмет истечения срока действия кэша.

module.exports = {
needUpdateCache: function () {
    let start = -1;
    const timeoutMs = rDefines["10_MINUTES_MS"];
    return function () {
        if (start === -1) {
            start = Date.now();
            return true;
        }
        let diff = Date.now() - start;
        if (diff < timeoutMs) {
            return false
        } else {
            start = Date.now();
            return true;
        }
    }
}(),

Тогда в главном контроллере маршрутов, он у меня называется так

exports.getData = function (req, res, next) {

if (!common.needUpdateCache()) {
    console.log('Still in caching period. Retrieve from saved local file');
    common.csvFile2jsonArray("data.txt").then((jsonObj) => {
        res.json({"songs": jsonObj});
    });
    return;
}
else // get new data from db and save it to local file data.txt

Причина, по которой я думаю, что замыкание в моем коде является причиной, заключается в том, что сравнение heapdump показывает множество замыканий, созданных не собранными, что приводит к тому, что pm2 показывает увеличение использования памяти. Вот снимок heapdump

enter image description here

Я провел исследование по закрытию и утечке памяти, но не понял, почему мой код создает утечку. Я исправил это, удалив использование закрытия. Однако мне действительно любопытно, почему я получаю утечку памяти с моим кодом. Если у вас есть какие-либо подсказки, пожалуйста, помогите указать это, чтобы я мог следить за этим в будущем. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 04 декабря 2018

Я наконец-то устранил проблему утечки памяти в своем приложении, удалив упомянутые детали закрытия. После чего утечка памяти, кажется, решена. Но затем я также должен удалить промежуточное программное обеспечение express-formidable, которое иногда вызывает зависание приложения. Теперь мое приложение работает без утечек Спасибо Берги за ваш комментарий, ценится.

...