【前端开发】记一次Echart 内存泄露问题的排查
最近发现一个web项目总是莫名其妙的内存增长,然后进行定位后来发现问题大概率出在Eharts上。
于是乎就开始搜索关于echarts内存增长的一些例子,但是都没有结果。
其中翻博客时发现甚至有人换成一维数组就问题就解决了,当然这个试过之后对我来说解决不了问题。

(这样能解决掉也真是离了个大谱啊,可有时候问题就是那么的不一样。。)
然后只能去看看issues了,这一看发现早在7年之前就有人提过这类问题,每隔一段时间都有人再单独提问,甚至在上周还有人提问,但是所有相关的issues看样子都不了了之了。

这之后这些帖子下甚至每年都还有人吐槽


各种吐槽 然后我看到了这个帖子

就去检查了下官方的例子,确实也有内存增长,然后就单独开了issue反映,想着终于能解决了,然后是等待回复进行沟通。
在沟通时发现问题也不是很简单,因为这个增长的数据在多浏览器下表现不一样,甚至还一直怀疑是vue的问题,同时还发现虽然官方例子也有增长,但是现象不同。
于是就一点点的试和排查,最后定位到了问题。
symbol开启会导致 在setoption内存释放不掉
就是点绘制的问题,而关键就是默认点绘制是开启的。
最终该问题的echarts的开发者修复也已经提上来了,应该会在下个版本(5.5.2)解决。

希望同样被这个问题折磨的朋友们也能解脱下。
解决方案:
1、等待最新版本更新,直接升级echarts
2、或者设置symbol为none将不开启点的绘制,或者是将showSymbol设置为false,这将只在touch的时候显示点。
最后附上issue
[Bug] Echart setoption内存会随时间增长且无法回收(必现) · Issue #20151 · apache/echarts (github.com)
【前端开发】记一次Echart 内存泄露问题的排查的更多相关文章
- 记一次golang内存泄露
记一次golang内存泄露 最近在QA环境上验证功能时,发现机器特别卡,查看系统内存,发现可用(available)内存仅剩200多M,通过对进程耗用内存进行排序,发现有一个名为application ...
- python内存泄露memory leak排查记录
问题描述 A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的. 针对每个集群,主线程会创建一个子线程,并由子线程去检测.子线程会频繁的创建和销毁. 上线以后,由于经常会有 ...
- iOS开发那些事--性能优化–内存泄露问题的解决(转)
内存泄漏问题的解决 内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止.如果这种对象过多内存就会耗尽,其它的应用就无法运行.这个问题 ...
- Java内存泄露简述
Java的一个最显著的优势是内存管理.你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收.然而,情况并不是这样简单,内存泄露还是经常会在Java应用程序中出现. 本篇 ...
- (6)java的内存泄露问题
一:什么是内存泄露--->Java的一个最显著的优势是内存管理.你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收.然而,情况并不是这样简单,内存泄露还是经常会 ...
- Netty堆外内存泄露排查与总结
导读 Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程. Netty 底层基于 JDK ...
- 【JVM】java的内存泄露问题
一.GC可回收的对象 二:什么是内存泄露--->Java的一个最显著的优势是内存管理.你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收.然而,情况并不是这样简 ...
- node.js内存泄露问题记录
先说一下.事情的来龙去脉. 公司开发一款游戏棋牌游戏,服务端的开发是IO密集型,开发的时候,考虑过使用python,java,node.js. 终于选择了node.js(node.js宣传的杀手功能. ...
- 从IT圈“鄙视链”看前端开发有多难?
如今"鄙视链"体现在生活的方方面面,各行各业都有默认一致的鄙视链.IT圈子因为开发语言多样.工程师岗位种类多.技术框架多,也有自己圈子内的鄙视链.按照开发工程师的岗位形成的鄙视链是 ...
- Android开发笔记——常见BUG类型之内存泄露与线程安全
本文内容来源于最近一次内部分享的总结,没来得及详细整理,见谅. 本次分享主要对内存泄露和线程安全这两个问题进行一些说明,内部代码扫描发现的BUG大致分为四类:1)空指针:2)除0:3)内存.资源泄露: ...
随机推荐
- vue-cli@4搭建 vue + element-ui 项目实操
原文链接: vue-cli@4搭建 vue + element-ui 项目实操
- Playwright自动化登录JD
import base64 import random import re import time from playwright.sync_api import sync_playwright im ...
- 如何高效发布Android AAR包到远程Maven仓库
本文同步发布于公众号:移动开发那些事如何高效发布Android AAR包到远程Maven仓库 1 背景 在Gradle 7.0之前的版本中,maven插件是发布AAR包到远程Maven仓库的主要工具. ...
- js操作shadow-root内的DOM元素
其实就是 documentfragment元素,就是动态生成的文档碎片元素. 1,项目中在DOM结构里遇到了shadow-root(open),用JS方法无法直接获取其内的DOM元素 2.shadow ...
- ETL工具--Sqoop
1. 概述 Sqoop是apache旗下的一款 "Hadoop和关系数据库之间传输数据"的工具导入数据:将MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.HBA ...
- 求mod运算
求A mod B 要求 B必须是2的次方 方法 A mod B = A & (B - 1) 程序 #include <stdio.h> //10 mod 8 = 2 int add ...
- VLDB来啦!企业上云“搭子”天翼云TeleDB数据库有话说
近日,VLDB 2024(International Conference on Very Large Data Bases)在广州隆重举行,全球数据库领域顶尖学者汇聚一堂,围绕数据库行业前沿议题展开 ...
- Iceberg根据快照查看文件,根据文件查看哪个快照写入
一.背景 用户查询iceberg表时报文件为空,因为存在写入和治理程序同时操作iceberg表,需要查看空文件是哪个快照产生的,方便确定是flink写入缺陷还是spark治理缺陷 二.通过Sql查询文 ...
- Hetao P1391 操作序列 题解 [ 绿 ] [ 二维线性 dp ]
操作序列:简单的二维 dp. 观察 我们每次操作可以让 \(x\) 变为 \(2x-1\),或者当 \(x\) 为奇数时让 \(x\) 变为 \(\frac{x+1}{2}\). 显然,执行第一种操作 ...
- 手把手教你在个人电脑部署本地知识库(基于RAGFlow + DeepSeek [+ Ollama])
1. 实现方案及准备工作 按照教程一步一步操作,基本没有什么太大难度,稍显麻烦的可能就是因网络问题有些资源无法下载,对于镜像无法下载的问题,文中也提供了替代的方法,但是github访问不稳定这点 ...