Web Worker 内存泄漏?

Posted

技术标签:

【中文标题】Web Worker 内存泄漏?【英文标题】:Web Worker Memory Leak? 【发布时间】:2013-03-16 19:36:43 【问题描述】:

我一直在使用Chrome's Timeline 视图来尝试追踪我的页面中的一些内存泄漏。我发现了一个特殊的内存泄漏,它是由实例化网络工作者导致的,我似乎无法弄清楚如何摆脱它。

我已经剥离了页面,只加载了 web worker,什么都不做。每次刷新页面时,Chrome 时间轴视图上的 Document Count 都会永久增加 1。如果我注释掉对 Worker 构造函数的调用,并开始刷新页面,文档计数会先增加后减少,实际上保持不变。手动终止/关闭 worker 并不能解决问题(尽管当我查看开发人员工具的 Sources 选项卡时可以看到 worker 消失了)。

这是我精简的 .htm 文件。我可以用这一小段 html/javascript 重现这个问题:

<html>
<script type="text/javascript">
var worker_blob = new Blob(["var test = 1;"]);
var worker_url = window.URL.createObjectURL(worker_blob);
// Comment out the line below and the memory leak goes away
var worker = new Worker(worker_url);
window.URL.revokeObjectURL(worker_url);
</script>
</html>

【问题讨论】:

当您的工作人员完成其任务时,它可以close 自己或您的页面可能会调用terminate 我已经尝试了这两种方法,但都没有解决这个问题。另外,当我离开页面时应该终止worker。 这是偶然code.google.com/p/chromium/issues/detail?id=181680 吗? 我不能说我完全理解错误报告,但它似乎与我遇到的问题有关。希望这个简单的测试用例可以帮助您重现/解决问题。 【参考方案1】:

这是 Chrome v25 中的内存泄漏。它似乎已在 Chrome v26 中得到修复,因为该问题无法再重现。

【讨论】:

以上是关于Web Worker 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

Sidekiq 工作人员正在泄漏内存

Tomcat如何检测内存泄漏

在IOS中使用web服务时发生NSURLSession内存泄漏

记一次 .NET 某电厂Web系统 内存泄漏分析

如何测试 Web 应用程序的内存泄漏?

ThreadLocal和内存泄漏