使用javascript websocket,内存使用量正逐渐增加。为什么?

时间:2018-11-29 05:23:18

标签: javascript performance google-chrome websocket

我有一个使用javascript websockets来获取和呈现实时数据的web应用程序。问题是,一旦建立了websocket连接,我的浏览器的内存使用率就以MB为单位逐渐增加。 关闭标签后,内存使用率下降的幅度与其增加的幅度相同。 我也将通过websockets接收的数据呈现到google图表中,并且每2秒收到一次数据,触发使用新数据重新渲染图表。这可能是问题吗?还是websockets导致内存使用量增加? / p>

2 个答案:

答案 0 :(得分:0)

如果不了解更多关于您的应用程序的信息,并且没有看到您的代码并可能按如下所述对其进行检测,我们将无法确切地知道导致此问题的原因。

这不是webSockets的普遍问题。 webSockets可以打开并接收数据多年,而不会导致内存增加。

这些问题可以通过以下方法解决:

  1. 代码检查(找到一个无限期累积数据的地方)
  2. 查找有关遇到类似问题的人的文章,并查看他们的解决方案以了解他们是否适用于您
  3. 获取堆快照的指令,将它们与以前的快照进行比较,查看正在累积的对象类型,然后使用该知识来查找数据累积的来源。

有关进行内存使用调试的详细说明,请参见Chrome中的How to Record Heap Snapshots。实际上,没有什么比我们可以根据您针对特定案例的限制信息告诉您的更具体了。

通过不连接webSocket,然后通过运行setInterval()并反复渲染图表来模拟从webSocket获取数据,您可以完全从等式中消除webSocket。至少可以消除一些可疑代码。

仅供参考,以下是另外几篇文章:

Memory leak using google charts with ajax

Memory leak in google line charts

Quick tips for squeezing memory leaks out of Google's Javascript charts with live (continuous) data/streams

Profiling memory usage in Chrome

答案 1 :(得分:0)

我发现了问题所在。 感谢@ jFriend00提供指导。

在懒洋洋地阅读博客/帖子/文章后,我认为问题出在websocket,然后在此发布了问题。

我重新检查我的代码,发现问题在于每秒重新渲染图表;我正在创建图表的新实例以每秒渲染一次;我希望GC能够完成清理旧图表的工作图表,但事实并非如此。

我修改了代码以清除现有图表,并使用新数据和Voila进行渲染!我的内存消耗恢复正常。