wujie icon indicating copy to clipboard operation
wujie copied to clipboard

wujie单例模式存在内存泄漏

Open dengBox opened this issue 2 years ago • 10 comments

描述bug 系统加载过子系统之后,内存会一直不释放。导致内存越来越多

如何复现 给出详细的复现步骤 1、子系统A使用重建模式 2、浏览器打开子系统A 3、在当前页面打开chrome-memory,抓取内存快照 4、在当前页面刷新页面,(手动执行垃圾回收)抓取内存快照。

错误截图 image

image

最小复现仓库或者地址 查看快照,发现是wujie的shadow对象一直没有释放。

dengBox avatar Jun 07 '23 08:06 dengBox

所有子系统均会保存在内存中,但是貌似只有子系统第一次加载会保存在内存中,后续都不会。

dengBox avatar Jun 07 '23 08:06 dengBox

刷新了页面都没有释放内存?我有点想知道到底是啥引用了shadow

yiludege avatar Jun 07 '23 09:06 yiludege

快照中看到是这里: image

image

dengBox avatar Jun 07 '23 09:06 dengBox

现在的问题是sanbox 还是 shadow 没有释放呢

yiludege avatar Jun 07 '23 10:06 yiludege

暂时还没定位到问题,跟踪到了子系统的window变量没有销毁

而且有一个重要的现象是,调用了destory之后,再去加载这个子系统,快照中的wujie2对象会一直增加,刷新浏览器也存在 image

dengBox avatar Jun 07 '23 10:06 dengBox

我也遇到了同样的问题,我在想会不会是子应用中的事件监听没有删除,导致引用关系依然存在,虽然wujie将其沙箱设为null了,但是在内存中还有对应的引用关系,所以不会执行gc

weishenai avatar Jun 10 '23 02:06 weishenai

经过大量测试刷新页面,子系统内存不释放证实是浏览器(目前只在chrome中发现)问题,测试环境如下:

  1. 102.0.5005.0(开发者内部版本) (x86_64),已复现
  2. 103.0.5054.0(开发者内部版本) (x86_64),已复现
  3. 104.0.5112.0(开发者内部版本) (x86_64),已复现
  4. 105.0.5195.0(开发者内部版本) (x86_64),已复现
  5. 106.0.5249.0(开发者内部版本) (x86_64),已复现
  6. 107.0.5304.0(开发者内部版本) (x86_64),已复现
  7. 108.0.5359.0(开发者内部版本) (x86_64),已复现
  8. 109.0.5414.0(开发者内部版本) (x86_64),已复现
  9. 110.0.5481.0(开发者内部版本) (x86_64),已复现
  10. 111.0.5563.0(开发者内部版本) (x86_64),已复现
  11. 112.0.5615.0(开发者内部版本) (x86_64),已复现
  12. 113.0.5636.0(开发者内部版本) (x86_64),已复现
  13. 114.0.5735.0(开发者内部版本) (x86_64),未复现

注:但调用wujie中的destroy方法内存扔未释放,并且反复调用destory然后 挂载子系统,会产生重复子系统内存。

相关链接如下:

  1. chrome 更新日志
  2. chromium 更新日志
  3. chrome 快照日志

dengBox avatar Jun 26 '23 01:06 dengBox

114.0.5735.199 正式版也会有泄露问题

GuoSongGit avatar Jun 30 '23 08:06 GuoSongGit

我这边看到destory没存没有释放大致都是因为重写了iframe.document以及iframe.contentWindow导致内存没有释放,具体可以看下面这个链接 detached-window-memory

dengBox avatar Jul 13 '23 09:07 dengBox

直到现在还可以遇到这个bug,导致内存越来越大

zhaoyuqiqi avatar Jun 06 '24 02:06 zhaoyuqiqi

我这边看到destory没存没有释放大致都是因为重写了iframe.document以及iframe.contentWindow导致内存没有释放,具体可以看下面这个链接 detached-window-memory

大佬们解决了吗,有什么办法吗

edward492626 avatar Jan 10 '25 02:01 edward492626