javascript - Chrome堆快照结构解释
问题描述
使用 selenium,我拍摄了一个网站的内存快照,driver.execute_script(":takeHeapSnapshot")
并提取了它的元数据:
{
"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", "sliced string", "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": 6182075,
"edge_count": 17793245,
"trace_function_count": 0
}
}
有人可以解释一下每个字段的含义以及如何使用该信息来提取数据吗?什么是节点、边、位置字段等。例如,假设我在堆上有一个 ArrayBuffer,我知道它的大小(并且它是唯一的),我想检索这个数组。可以用快照做吗?
解决方案
元字段组解释了快照的不同数组的内容。
快照具有节点数组。该数组对堆中的每个节点都有 7 个数字,并且 node_fields 数组描述了所有这 7 个数字的含义。
同时 node_types 数组描述了这 7 个数字的类型。例如,如果节点数组中有接下来的 7 个数字 [ ....., 2, 9, 13, 42, 0, 0, 0, ......
然后是堆中的第 N 个节点
- 有“类型”字符串,因为 node_types[0][2] == 'string',
- 具有隐藏在堆的字符串数组中的“名称”。即字符串[9],
- 有“id”13,
- 使用 42 字节的堆
- 对堆中的其他对象有 0 个引用
- 有“trace_node_id”= 0,
- 具有“分离度”= 0,
edges 数组的每条边都有一个三元组数字,您可以在 edges_fields 中看到每个数字的名称,在 edge_types 数组中看到类型。例如边缘数组中偏移量 0 处的三元组 2、17、79 表示:
- 边缘实际上是对象的属性,因为 edge_types[0][2] = 'property'
- 属性名称隐藏在索引为 17 的字符串数组中
- 它指向了id为79的节点。(其实我忘了,是节点的索引还是节点的id)
- 如果节点数组的第一个节点的 edge_count = 2,那么边数组的前 2 个三元组是从这个节点到其他一些节点的边,等等。
我希望这个解释可以让你了解如何理解堆快照的内容。
推荐阅读
- python - 更改 hv.distribution 的字体样式
- layout - Webphere 9.0.5 是否可以配置一个 ClientPolicyBinding 在签名之后使用时间戳和 SignatureConfirmation 验证 WS-Security
- mongodb - 寻找最新的 Infinispan - MongoDB 兼容性详细信息
- php - MySQL:创建表克隆,用原始更新列
- python - 如何在 Python 中从多个 PDF 中提取特定表格
- python - 为什么我的 dict 在 python 的这个循环中被覆盖?
- google-drive-api - 如何获取谷歌驱动器中文件的文件路径以在 colab 中使用?
- javascript - FIREBASE 错误:服务帐户对象必须包含字符串“private_key”属性
- sql - BigQuery - SQL 将 Month DD、YYYY 格式的字符串转换为 DATE
- python - 编写日历程序时出现错误:TypeError: 'int' object is not callable