首页 > 其他分享 >heapsnapshot文件解析

heapsnapshot文件解析

时间:2024-04-03 11:47:25浏览次数:26  
标签:node 文件 heapsnapshot -- fields number edge 解析 id

简介

网页test.html

<doctype html> <!-- html5版本申明,需要写在文档的第一行 -->
<html>
	<head>
		<meta charset="utf-8" />
		<title>标题:基础语法</title>
		<link rel="stylesheet" href="引入CSS文件的路径" />
		<script src="引入的JS文件的路径" type="text/javascpript" charset="UTF-8"></script>
	</head>
<body bgcolor="#eeeeef">
    <h1>test</h1>
</body>
</html>

按F12:

构造函数(Constructor ):对象分类(构造器)和数量

距离(Distance):从根节点(Roots)到达该对象经过的最短路径的长度

浅层大小(Shallow size):对象自身大小(单位是 Byte),不含持有对象大小

保留的大小(Retained size):对象自身大小加上它依赖链路上的所有对象的自身大小(Shallow size)之和

问题:对象的被引用关系丢失显示为“-”

例子:丢失的情况

文件:test.heapsnapshot

{"snapshot":
{"meta":
{"node_fields":["type","name","id","self_size","edge_count","trace_node_id","detachedness"],
"node_types":[["hidden","array","string","object","code","closure","regexp","number","native","synthetic","concatenated string","slicedstring","symbol","bigint"],"string","number","number","number","number","number"],
"edge_fields":["type","name_or_index","to_node"],
"edge_types":[["context","element","property","internal","hidden","shortcut","weak"],"string_or_number","node"],
"trace_function_info_fields":["function_id","name","script_name","script_id","line","column"],
"trace_node_fields":["id","function_info_index","count","size","children"],
"sample_fields":["timestamp_us","last_assigned_id"],
"location_fields":["object_index","script_id","line","column"]},
"node_count":9,
"edge_count":6,
"trace_function_count":0
},
"nodes":[
 9,0,1,0, 2,0,0
,2,1,3,80,1,0,0
,8,3,5,80,2,0,0
,5,6,7,80,1,0,0
,8,2,9,80,0,0,0
,0,4,11,8,0,0,0
,2,5,13,8,0,0,0
,8,7,15,8,0,0,0
,2,8,17,8,0,0,0
],
"edges": [
5,9,7,
5,9,14,
5,9,28,
5,9,35,
5,9,42,
5,9,49
],
"trace_function_infos": [],
"trace_tree": [],
"samples": [],
"locations": [],
"strings": [
	"GC roots",
	"n1",
	"n2",
	"n3",
	"n4",
	"n5",
	"n6",
	"n7",
	"n8",
	"edge"
]
}

显示的情况

格式文件解析

{"snapshot":
{"meta":
{"node_fields":["type(type编号)","name(名字str索引)","id(v8 会确保该对象在本次应用生命周期中的多次的 dump 下中保持相同的 id)","self_size(shallow size浅层大小)","edge_count(边数量)","trace_node_id","detachedness"],

"node_types":[["hidden","array","string","object","code","closure","regexp","number","native","synthetic","concatenated string","slicedstring","symbol","bigint"],"string","number","number","number","number","number"],

"edge_fields":["type(边类型)","name_or_index(名字或者名字索引,当为element类型时为本身)","to_node(指向节点的索引)"],

"edge_types":[["context","element","property","internal","hidden","shortcut","weak"],"string_or_number","node"],

"trace_function_info_fields":["function_id","name","script_name","script_id","line","column"],
"trace_node_fields":["id","function_info_index","count","size","children"],
"sample_fields":["timestamp_us","last_assigned_id"],
"location_fields":["object_index","script_id","line","column"]},
"node_count":9,
"edge_count":6,
"trace_function_count":0
},
"nodes":[
 9,0,1,0, 2,0,0 //ROOT,两条边
,2,1,3,80,1,0,0 //7,n1
,8,3,5,80,2,0,0 //14,n3
,5,6,7,80,1,0,0 //21,n6
,8,2,9,80,0,0,0 //28,n2
,0,4,11,8,0,0,0 //35,n4
,2,5,13,8,0,0,0 //42,n5
,8,7,15,8,0,0,0 //49,n7
,2,8,17,8,0,0,0 //56,n8
],
"edges": [
5,9,7(n1的起始索引), //root-n1
5,9,14, //root-n3
5,9,28, //n1-n2
5,9,35, //n3-n4
5,9,42, //n3-n5
5,9,49  //n6-n7
],
"trace_function_infos": [],
"trace_tree": [],
"samples": [],
"locations": [],
"strings": [
	"GC roots",
	"n1",
	"n2",
	"n3",
	"n4",
	"n5",
	"n6",
	"n7",
	"n8",
	"edge"
]
}

解析后如下图:

图展示:

graph LR 1[1: GC roots]--edge-->3[3: n1] 1[1: GC roots]--edge-->5[5: n3] 3[3: n1]--edge-->9[9: n2] 5[5: n3]--edge-->11[11: n4] 5[5: n3]--edge-->13[13: n5] 7[7: n6]--edge-->15[15: n7] 8[8: n8]

修复问题

{"snapshot":
{"meta":
{"node_fields":["type","name","id","self_size","edge_count","trace_node_id","detachedness"],
"node_types":[["hidden","array","string","object","code","closure","regexp","number","native","synthetic","concatenated string","slicedstring","symbol","bigint"],"string","number","number","number","number","number"],
"edge_fields":["type","name_or_index","to_node"],
"edge_types":[["context","element","property","internal","hidden","shortcut","weak"],"string_or_number","node"],
"trace_function_info_fields":["function_id","name","script_name","script_id","line","column"],
"trace_node_fields":["id","function_info_index","count","size","children"],
"sample_fields":["timestamp_us","last_assigned_id"],
"location_fields":["object_index","script_id","line","column"]},
"node_count":9,
"edge_count":7,
"trace_function_count":0
},
"nodes":[
 9,0,1,0, 2,0,0
,2,1,3,80,1,0,0
,8,3,5,80,2,0,0
,5,6,7,80,1,0,0
,8,2,9,80,0,0,0
,0,4,11,8,0,0,0
,2,5,13,8,1,0,0 //n5增加一条边
,8,7,15,8,0,0,0
,2,8,17,8,0,0,0
],
"edges": [
5,9,7,
5,9,14,
5,9,28,
5,9,35,
5,9,42,
5,9,49,
5,9,21 //n5增加一条边,指向21 n7的起始位置
],
"trace_function_infos": [],
"trace_tree": [],
"samples": [],
"locations": [],
"strings": [
	"GC roots",
	"n1",
	"n2",
	"n3",
	"n4",
	"n5",
	"n6",
	"n7",
	"n8",
	"edge"
]
}
graph LR 1[1: GC roots]--edge-->3[3: n1] 1[1: GC roots]--edge-->5[5: n3] 3[3: n1]--edge-->9[9: n2] 5[5: n3]--edge-->11[11: n4] 5[5: n3]--edge-->13[13: n5] 7[7: n6]--edge-->15[15: n7] 13[13: n5]--edge-->7[7: n6] 8[8: n8]

最后效果:

标签:node,文件,heapsnapshot,--,fields,number,edge,解析,id
From: https://www.cnblogs.com/UFO-blogs/p/18112309

相关文章

  • Maven项目,本地jar包导入手动导入到Maven库中 ,也可以直接将jar包放到lib文件夹,右键 Add
    Maven项目,本地jar包导入手动导入到Maven库中,也可以直接将jar包放到lib文件夹,右键AddAsLibrary当你的项目,由于网络或者环境这些问题,无法从maven中央仓库更新jar包到本地的时候,可以尝试下面方法,手动添加jar包到Maven仓库;方法一(推荐):1、需要先拿到你的jar包,copy到本地。例如我......
  • 全方位解析ChatGPT:如何培养 AI 智能对话技能?
    简介ChatGPT的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。和ChatGPT沟通也是同样的道理,如果想要ChatGPT给到的信息越准确,越清晰,和它的沟通就至关重要。如何能和Chat......
  • MP3文件ID3信息编辑器代码开源 - 开源研究系列文章 - 个人小作品
    上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器。这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可。 1、 项目目录; 2、 源码介绍;这个操作信息编辑的就封装在MP3ID3.bas文件中。          ......
  • [转]docker compose 配置文件 .yml 全面指南
    原文地址:dockercompose配置文件.yml全面指南-知乎Compose是一个用于定义和运行多容器Docker的工具。借助Compose,您可以使用YAML文件来配置应用程序的服务。使用Compose基本上分为三步:使用Dockerfile定义您的应用程序的环境使用docker-compose.yml定义组成......
  • 知识图谱技术的深度解析与应用前景展望
    在数字化时代,信息爆炸式增长,如何有效地组织、存储和查询知识成为了一个亟待解决的问题。知识图谱作为一种新型的知识表示和组织方式,正逐渐成为信息领域的研究热点。本文将对知识图谱的技术原理、构建方法以及应用前景进行深度解析,旨在为读者提供一个全面而深入的了解。一、知识图......
  • excel文件数据行携带表头信息为map
    privateList<Map<String,String>>readExcelForMap(InputStreaminput){List<Map<String,String>>list=newArrayList<>();EasyExcel.read(input,newAnalysisEventListener<Map<String,String>>(){......
  • 解析基础设施即代码:重新定义云管理
    由于现代架构、应用程序接口和相互关联的服务之间的互联性越来越强,云基础设施的复杂性也与日俱增。随着需要管理的云资源数量不断增加,企业开始采用基础设施即代码(IaC)来解决云应用的复杂性和相互依赖性问题。 IaC提供各种工具、流程和方法,以简化基础设施管理、降低风险并采用新......
  • 第十一篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操
    传奇开心果博文系列系列博文目录Python自动化办公库技术点案例示例系列博文目录前言一、重要作用二、Python操作PDF文件转Word文档介绍三、提高效率示例代码四、保持一致性示例代码五、精确度与质量控制示例代码六、适应复杂需求示例代码七、可扩展性与与集成性示例代码......
  • 在Linux中,什么是文件系统?常用文件系统有哪些?
    在Linux中,文件系统是一种用于控制数据在存储设备上如何存储和检索的方法。它组织和管理磁盘上的文件和目录,并定义了文件的存储结构。文件系统负责跟踪文件的位置、大小、权限、创建和修改时间等信息。Linux支持多种文件系统类型,每种类型都有其独特的特性和用途。1.文件系统的作......
  • WPF开发分页控件:实现可定制化分页功能及实现原理解析
    概要本文将详细介绍如何使用WPF(WindowsPresentationFoundation)开发一个分页控件,并深入解析其实现原理。我们将通过使用XAML和C#代码相结合的方式构建分页控件,并确保它具有高度的可定制性,以便在不同的应用场景中满足各种需求。一.简介分页控件是在许多应用程序中常见......