我们长期运行的THREE.js应用程序(24/7)在使用几天后崩溃.我已经将模拟用户交互的压力测试放在一起,这些测试处于while(true)循环中,并且这些测试似乎需要3-4天才会发生WebGL_Context_Lost事件,这通常表示GPU进程崩溃.
我精通Chrome Dev Tools Heap剖析器并运行了大量测试,所有测试都返回,每次模拟之间没有任何对象(上述相同的模拟).
这是一个屏幕截图,仅显示留下的系统对象(忽略第一个快照的大小):

JavaScript内存和GPU内存都在Chrome任务管理器中攀升,但稳定了(我觉得GC因为这些操作的频繁程度而被推迟).没有连续爬向碰撞,表明泄漏.
版本:Chrome 65-66,Windows 10,THREE.js r91
问题:
JavaScript堆是否有可能无泄漏,但GPU中有什么漏洞?
我可以使用哪些工具来查找GPU内存泄漏?
是否有可能知道究竟是什么导致了WebGL_context_lost?(Chrome日志?)
以前有人处理过这个吗?
有任何想法吗?
提前致谢
更新:
模拟运行30分钟,我捕获堆快照,然后是Chrome任务管理器的截图(AFAIK捕获堆快照也运行GC).
5:00 - 主屏幕的初始快照
5:30
6:00
6:30
7ish
晚上8点
这是令人困惑的部分:即使在执行手动GC之后,GPU内存仍然保持在~490MB,直到我切换标签然后它又回到初始状态
如果切换选项卡将GPU内存恢复到初始状态,那么问题可能是Chrome试图过于聪明并且没有丢弃GPU对象,这会对机器造成压力并最终耗尽内存?
注意:这些测试是在最新驱动程序上使用Intel Iris Graphics 540的Intel i5上运行的(23.20.16.4973 - 2018-02-28)
我们也在运行最新驱动程序的Iris 640上看到了这一点.
对于那些感兴趣的人,这里是7:30和5:30的堆快照比较:
更新2 - 看起来像司机问题
重新加载页面后,2分钟进入模拟,GPU崩溃了"老鼠,WebGL遇到了障碍".记忆没有机会出现,所以我怀疑是否存在泄漏.
Windows系统日志警告图形驱动程序停止工作,这发生在同一时间.
WebGL的时间戳上下文丢失了Chrome中的错误: 10:07:52.938PM
Windows系统日志驱动程序问题的时间戳(我猜它是四舍五入的): 10:07:53PM
1.说这是驱动程序问题是否安全?
2. Chrome是否会杀死GPU进程并在进程日志中记录到Windows日志或驱动程序是否行为不当而导致Chrome杀死GPU进程?
这台机器通过Windows Update运行最新的驱动程序,我将使用英特尔的驱动程序卸载和更新并重新运行测试.