gpt4 book ai didi

node.js - Node GeoFire 内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:01 25 4
gpt4 key购买 nike

我在 Node 上运行了一些非常基本的 firebase + firebase-queue + GeoFire 代码,这似乎导致了内存泄漏,但我不相信我没有在某个地方搞砸了。

'use strict';

if (!process.env.FIREBASE_PROJECT_ID) {
require('dotenv').config({ silent: true });
}

let fbConfig = require('./firebase-config');
let fbNodes = fbConfig.NODES;
let Queue = require('firebase-queue');
let admin = require("firebase-admin");
let GeoFire = require('geofire');

admin.initializeApp({
credential: admin.credential.cert(fbConfig.FIREBASE_SERVICE_ACCOUNT),
databaseURL: fbConfig.APP_SETTINGS.databaseURL
});

let db = admin.database();
let queueRef = db.ref(fbNodes.QUEUE);
let geoFire = new GeoFire(db.ref(fbNodes.GEOFIRE));

var q = new Queue(queueRef, function (data, progress, resolve, reject) {
let geoQuery = geoFire.query({
center: data.queryCenter,
radius: data.maxDistanceKm
});

// fires for every key returned by the geoQuery
let listener = geoQuery.on('key_entered', function (key, loc, dist) {
// do nothing
});

// This will fire once the initial data is loaded, so now we can cancel
// the "key_entered" event listener
geoQuery.on('ready', function () {
listener.cancel();
resolve();
});
});

下面是内存使用情况的内存消耗图表,显示此代码在大约 10 分钟后消耗了 1.5 GB 内存,并解决了 1100 个任务,直到崩溃。

memory consumption charted by memory-usage

知道这里发生了什么吗?

它运行于:

  • Node 6.7.0
  • firebase-admin 4.0.4
  • firebase 队列 1.6.1
  • geofire 4.1.1

最佳答案

泄漏是由 GeoFire 查询引起的。每次处理队列中的任务时,都会创建一个查询,但这些查询永远不会被取消 - 只有它们的监听器会被取消。

要堵住漏洞,请在完成后对查询调用cancel。例如:

geoQuery.on('ready', function () {
listener.cancel();
geoQuery.cancel();
resolve();
});

关于node.js - Node GeoFire 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41630007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com