perfetto 官方文档翻译

Perfetto 翻译第十三篇-数据来源-java heap d

2023-10-10  本文已影响0人  David_zhou

前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具

目录

#####################以下分割线#####################
英文原文在这里
NOTE: 抓取 Java heap dumps 需要 Android 11 或更高的系统

有关Java heap dumps的入门信息,请参阅内存指南

Native heap profiles相反,Java heap dumps 显示存活对象的内存,但不显示调用堆栈。Java heap dump中记录的信息形式如下:对象X通过其名为Z的类成员保留了N字节大的对象Y。

Java heap dumps不能与 Java heap sampler混淆

UI

单击进程的"Heap Profile"轨迹中的菱形后,Heap graph dumps在UI中显示为火焰图。每个菱形对应一个heap dump。

java head dumps profile-diamond (1).png
java-heap-graph (1).png

某些native对象的大小在火焰图中表示为一个额外的子节点,前缀为“[na't've]”。额外的节点算作额外的对象。这仅在Android 13及更高版本上可用。

SQL

有关Java堆的信息写入以下表格:

heap_graph_class

heap_graph_object

heap_graph_reference

native_size(仅在Android T+上可用)是从相关的libcore.util.NativeAllocationRegistry中提取的,不包含在self_size中。

例如,要获取类名使用的字节数,请运行以下查询。这个查询通常会返回不实用的信息,因为Java堆中的大多数字节最终实际都是基本对象数组或字符串。

select c.name, sum(o.self_size)
       from heap_graph_object o join heap_graph_class c on (o.type_id = c.id)
       where reachable = 1 group by 1 order by 2 desc;
java heap dump_1.png

我们可以使用experial_framegraph将图规范化为树,然后采用到GC Root的最短的路径,然后获得累积大小。请注意,这是实验性的,API可能会更改。从中我们可以看出每种类型的对象都拥有多少内存

为此,我们需要找到图的时间戳和upid。

select distinct graph_sample_ts, upid from heap_graph_object
graph_sample_ts upid
56785646801 1

然后我们可以使用它们来获得火焰图数据。

select name, cumulative_size
       from experimental_flamegraph
       where ts = 56785646801
            and upid = 1
            and profile_type = 'graph'
       order by 2 desc;
java heap dump_2.png
TraceConfig

Java heap dump采集的数据来源在 JavaHprofConfig 这里配置。

data_sources {
  config {
    name: "android.java_hprof"
    java_hprof_config {
      process_cmdline: "com.google.android.inputmethod.latin"
      dump_smaps: true
    }
  }
}

#####################以上分割线#####################

后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议

上一篇 下一篇

猜你喜欢

热点阅读