【问题标题】:Chrome extension memory leak in chrome.extension.sendMessage()?chrome.extension.sendMessage() 中的 Chrome 扩展内存泄漏?
【发布时间】:2012-12-15 21:25:37
【问题描述】:

我在使用 Chrome 的 chrome.extension.sendMessage() 的长期页面中看到相当 大量 内存泄漏

在将 ~200k 事件从 Content-Script 发送到 Background-Page 作为测试后,chrome.Event 的保留大小是 ~50MB 堆快照中保留内存的 ~80%

我一直在试图追踪我可能犯的任何错误,关闭一些变量并防止它被 GC'd,但这似乎与 Chrome 事件系统的实现有关

有没有人遇到过这样的事情,或者看到内存泄漏以及使用内容脚本的非常长寿命的扩展与 bg 页面经常聊天?

我的 Content-Script 端的代码:

  csToBg = function(message) {
    var csToBgResponseHandler = function(response) {
      console.log("Got a response from bg");
      };

    var result = chrome.extension.sendMessage(null, message, csToBgResponseHandler)
  };

在后台页面方面,一个简单的 ACK 函数(迷信地避免https://code.google.com/p/chromium/issues/detail?id=114738):

var handleIncomingCSMessage = function(message, sender, sendResponse) {
  var response = message;
  response.acked = "ACK";

  window.console.log("Got a message, ACKing to CS")

  sendResponse(response);
}

以这种方式在 Chrome 23.0.1271.97 中发送约 20 万条消息后,堆快照如下所示:

内存似乎永远不会在页面的生命周期内被回收,我不知道如何修复它。

编辑:这是标准背景页面,不是活动页面。

【问题讨论】:

  • windows中的结果比上面最差!
  • 首先,值得一提的是,200K 事件似乎不是单个消息的预期用例。相反,应该使用long-lived 连接。也许这可以降低内存消耗。也尝试更改您的代码:var response = {};,加上可能是delete message;。我已经对这些更改进行了一些测试,它在快照中看起来更好,但需要进一步的验证和确认。
  • I've had this is issue before,应该修复了。奇怪的是这又出现了,尝试报告新的错误报告吗? (或重新打开我的旧的)

标签: google-chrome google-chrome-extension google-chrome-devtools


【解决方案1】:

这可能已在 chrome 32 中修复。

终于!

详情请见http://code.google.com/p/chromium/issues/detail?id=311665

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 2018-05-30
    • 2019-07-16
    • 2014-03-10
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多