首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点GeoFire内存泄漏?

节点GeoFire内存泄漏?
EN

Stack Overflow用户
提问于 2017-01-13 08:09:52
回答 1查看 265关注 0票数 1

我有一些看似非常基本的防火墙+防火墙队列+ GeoFire代码运行在Node上,这似乎会导致内存泄漏,但我不相信我没有在某个地方搞砸什么东西。

代码语言:javascript
复制
'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.5GB的内存,并且1100个任务被解析,直到崩溃。

知道这是怎么回事吗?

这是在运行:

  • 节点6.7.0
  • firebase-管理4.0.4
  • firebase-队列1.6.1
  • 地火4.1.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-13 18:24:35

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

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

代码语言:javascript
复制
geoQuery.on('ready', function () {
  listener.cancel();
  geoQuery.cancel();
  resolve();
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41630007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档