首页 > 解决方案 > Electron Renderer 仅在 DevTools 打开时处理 OOM

问题描述

我有一个带有渲染器进程的电子应用程序,可以显示大图像(~300MB)。图像数据是通过 web worker 中的 websocket 连接接收的,我在其中使用 rxjs 进行 websocket 管理。

当我打开 Chrome DevTools 时,渲染器崩溃并显示来自电子的以下消息:

Renderer process oom - see https://www.electronjs.org/docs/tutorial/application-debugging for potential debugging information.

当我没有打开 DevTools 时,渲染器进程不会崩溃。我曾尝试在启动渲染器进程之前在 Electron 中设置标志:--js-flags="--max-old-space-size=[memory size in MB]"这有助于缓解即使在 DevTools 关闭的情况下我看到的一些崩溃,但是无论我将这个数字设置多高,当 DevTools 打开和一条大消息时,进程仍然始终崩溃通过 websocket 接收。我在 Windows 10 的任务管理器中看不到任何高内存使用率。

经过大量调试后,我将渲染器崩溃的范围缩小到在收到大型 websocket 消息时立即崩溃。我在 JavaScript 中数据可用的第一个点设置了断点和控制台日志消息,并且在渲染器进程崩溃之前它们不会被捕获/显示。所以我的猜测是,打开 DevTools 会出现某种内存问题。rxjs 不会有问题,因为它可以在 DevTools 关闭的情况下正常工作。我在这里遇到的 Chrome DevTools 是否有某种单独的内存限制?

标签: javascriptelectronchromiumdevtoolsrenderer

解决方案


推荐阅读