首页 > 解决方案 > 如何强制 Chromium 的垃圾收集器在 JS 中运行?

问题描述

我正在为具有客户端和服务器的嵌入式系统构建一个基于 HTML 的小型软件。该软件在始终处于活动状态的单个选项卡上工作。客户端和服务器一直在交换消息。大约 50 小时后,客户崩溃了。经过简短的调查,似乎客户端一直在消耗内存,直到没有剩余内存并且分配新内存的调用失败。然后我在网页上看到“Aw, snap”。

我尝试使用 chromium 的“开发者工具”进行调试。似乎当我按下“收集垃圾”按钮时,大部分内存都被清除了。

在此处输入图像描述

这是尽可能减少客户端后的代码:

const socket = new WebSocket('ws://localhost:8070');
socket.binaryType = "blob";
socket.onopen = handleOpen;
socket.onmessage = handleSocketMessage;

function handleOpen() {
  console.log('socket is ready');
}

function handleSocketMessage(message) {
  // console.log(message);
}

代码在 Variscite 的 imx6 SOM 上运行。该操作系统是使用 Yocto 项目版本 Sumo 制作的。铬版本是 67.0.3396.99

在线浏览,铬/铬似乎不允许手动调用垃圾收集器。有没有办法解决这个问题?你能想出不同的可能解决方案吗?还有什么可能导致客户端消耗所有操作系统的内存然后崩溃?

标签: javascripthtmlchromiumyocto

解决方案


推荐阅读