Memory leaks 使用mocha运行测试会导致内存泄漏和大型字符串结构
我正在尝试设置一个环境来检测应用程序中的内存泄漏 应用程序设置:角度+电子Memory leaks 使用mocha运行测试会导致内存泄漏和大型字符串结构,memory-leaks,electron,mocha.js,webdriver-io,spectron,Memory Leaks,Electron,Mocha.js,Webdriver Io,Spectron,我正在尝试设置一个环境来检测应用程序中的内存泄漏 应用程序设置:角度+电子 使用Mocha+Spectron+WebDrivero模拟应用程序使用 我在新安装的应用程序上运行不同用户场景的测试,并定期收集每个进程的内存使用情况 当应用程序处于空闲状态时,内存使用情况与预期一致。但是我遇到了其他测试用例的问题似乎在使用mocha运行测试时,我在内存中得到了意想不到的未知结构。这会导致内存泄漏。 我在下面附上了一个屏幕截图(),它最好地描述了我的困惑 快照1:在应用程序设置后拍摄(81.8 MB
使用Mocha+Spectron+WebDrivero模拟应用程序使用 我在新安装的应用程序上运行不同用户场景的测试,并定期收集每个进程的内存使用情况 当应用程序处于空闲状态时,内存使用情况与预期一致。但是我遇到了其他测试用例的问题似乎在使用mocha运行测试时,我在内存中得到了意想不到的未知结构。这会导致内存泄漏。
我在下面附上了一个屏幕截图(),它最好地描述了我的困惑
- 快照1:在应用程序设置后拍摄(81.8 MB)
- 快照2:在一组测试完成(正常使用约10分钟)且应用程序返回到启动状态(109 MB)后拍摄
- 快照3:在强制GC后拍摄(通过“收集垃圾”按钮)(108 MB)
$0
,所有字符串的输出结果相同:…
。当我将元素悬停时,它会链接到我的应用程序的主体(对于每个字符串)
“扩展字符串结构”给了我一种感觉,这是由于某些模块被多次加载,并且其引用从未被破坏(我猜是通过internal/modules/cjs/loader.js:136
中的module()
加载的)
当使用“分配时间线”检查内存时,我在“堆快照>比较”下的“未释放内存”中找不到导致新“大字符串对象”的相同操作的“大字符串对象”
当我手动模拟测试场景或通过控制台中的功能模拟点击时,没有内存泄漏。
所有这些都让我觉得,我在做或使用错误的东西(关于摩卡咖啡)
我的问题是:
$0
调用时,如何有多个字符串(多个引用?)都引用相同的DOM元素(
)我花时间尝试获取更多数据。您是正确的,字符串中的代码来自chromedriver,看起来代码块注入了“callFunction()”方法。对于我对应用程序的每次调用,都会向堆中添加一个字符串。使用
.refresh()
刷新当前上下文会清理堆。但我担心这也会重置我的内存泄漏,我正试图抓住它。你有什么建议我可以写,或者我可以研究些什么来尝试解决这个问题吗?@user3650404可能使用chrome内置探查器可以帮助检测内存泄漏,但实际上客户端性能测试最好从功能测试中分离出来,不要将它们混合在一起。