当前位置: 首页 > 科技观察

全新的JavaScript堆内存分析工具OneHeap

时间:2023-03-22 17:16:49 科技观察

OneHeap专注于JavaScript运行内存信息的展示,直观还原HeapGraph,帮助理解v8内存管理。JavaScript运行过程中的大部分数据都存储在堆(Heap)中,因此JavaScript性能分析的另一个重要方面是内存,即堆的分析。ChromeDevTools可以用来生成应用程序在某个时刻的堆快照(HeapSnapshot),更加完整的记录了各种对象和引用的情况,堪称查找内存泄漏的神器。与Profile结果一样,快照可以导出为.heapsnapshot文件。上周发布了OneProfile这个工具,可以用来动态展示Profile的结果,分析各个函数的调用关系。周末,我用类似的想法研究了.heapsnapshot文件,并制作了这个网络小工具,以有向图的形式显示堆快照。OneHeap名称的由来ComputerScience中只有两件难事:cacheinvalidation和namingthings。--PhilKarlton来不及想一个高端大气高端的名字,因为我工作的公司叫OneAPM(省软光1000字,总之性能监控很好),所以它被命名为OneHeap。它是Toolkit中的第二个。如何生成HeapSnapshot文件使用Chrome打开测试页面按F12打开Devtools,切换到Profiles页面,选择TakeHeapSnapshot。稍等片刻,右键点击生成的Snapshot导出,文件后缀一般为.heapsnapshot。Node.JS如果你是Node.JS工程师,你可以安装著名的模块heapdump。https://github.com/bnoordhuis/node-heapdump以上两种方法都可以生成.heapsnapshot文件。这是用于测试以了解.heapsnapshot文件格式的nodejs.heapsnapshot。打开nodejs.heapsnapshot文件进行测试。这是一个LargeJSON对象:snapshot属性保存了快照的一些基本信息,如uid、快照名称、节点数等。nodes保存了所有节点的id、名称、大小信息等,对应于v8源代码中的HeapGraphNodeedges属性。定义了节点之间的映射关系。v8源码对应的HeapGraphEdgestrings存放所有字符串。节点和边不直接存储字符串,而是将字符串存储在字符串中。索引堆快照实际上是一个有向图。数据结构,但是.heapsnapshot文件在存储过程中使用了一个数组来存储图的结构。这种设计非常巧妙,减少了所需磁盘空间的大小。nodes属性nodes是一个很长的一维数组,但是为了阅读方便,v8在序列化的时候会自动换行。根据不同的v8版本,可能有5行,也可能有6行。如果有6行,就会多出一个trace_node_id属性。

最新推荐
猜你喜欢