• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 查看HiTraceMeter日志
2
3<!--Kit: Performance Analysis Kit-->
4<!--Subsystem: HiviewDFX-->
5<!--Owner: @qq_437963121-->
6<!--Designer: @kutcherzhou1; @MontSaintMichel-->
7<!--Tester: @gcw_KuLfPSbe-->
8<!--Adviser: @foryourself-->
9
10## 通过DevEco Studio可视化界面查看
11
12使用DevEco Studio Profiler工具可以可视化展示HiTraceMeter日志内容,分析应用或服务的CPU使用率和线程运行状态,查看指定时间段内程序在CPU上的执行耗时。具体使用指导请参考[CPU活动分析:CPU分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-cpu)13
14
15## 通过命令行工具查看
16
171. 根据hdc命令行工具指导,完成[hdc环境准备](hdc.md#环境准备),确保可以使用“hdc shell”命令正常连接设备。
18
192. 在DevEco Studio Terminal窗口或主机命令行窗口执行“hdc shell”命令连接设备,然后在设备上执行[hitrace](hitrace.md)命令,开启HiTraceMeter日志抓取服务。
20
21   ```shell
22   PS D:\xxx\xxx> hdc shell
23   $ hitrace --trace_begin app
24   ```
25
263. 在设备上运行包含HiTraceMeter打点的相关程序。
27
284. 使用hitrace命令行工具采集文本格式trace信息,将trace文件保存到设备/data/local/tmp/路径下,具体流程可参考[快照模式捕获文本格式trace](hitrace.md#快照模式捕获文本格式trace)。
29
305. 退出设备,进入主机,导出设备中的HiTraceMeter文本日志到当前目录(下面命令中的trace.ftrace根据采集时设置的文件名修改)。
31
32   ```shell
33   $ exit
34   PS D:\xxx\xxx> hdc file recv /data/local/tmp/trace.ftrace ./
35   ```
36
376. 在HiTraceMeter文本日志中搜索打点名称等关键字,查看打点是否成功。
38
397. HiTraceMeter支持文本日志的可视化分析。
40
41   - 在DevEco Studio中导入日志进行分析。
42
43      在DevEco Studio Profiler的会话区选择“Open File”,将HiTraceMeter文本日志导入DevEco Studio。
44
45      具体分析可参考[CPU活动分析:CPU分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-cpu)文档。
46   - 通过[Smartperf_Host](https://gitee.com/openharmony/developtools_smartperf_host)工具进行分析,工具下载链接:[developtools_smartperf_host 发行版](https://gitee.com/openharmony/developtools_smartperf_host/releases)47
48## 用户态trace格式说明
49
50开发者可以通过[hitrace](hitrace.md)命令采集用户通过HiTraceMeter接口生成的用户态trace日志,从而对应用进行性能分析。本章节将详细介绍用户态trace的格式和扩展规则,包括同步、异步和整数值跟踪等类型。每种trace的字段组成、含义及与打点入参的关系都会逐一说明,并提供[具体样例](#各场景trace日志样例)供参考。
51
52API version 19及以上版本的用户态trace格式参考[当前版本用户态trace格式](#当前版本用户态trace格式),API version 19以下版本的用户态trace格式参考[API version 19前用户态trace格式](#api-version-19前用户态trace格式)。
53
54
55### 当前版本用户态trace格式
56
57**同步跟踪**
58
59 * 开始trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容]|[级别与所属Tag集合]|[自定义键值对]`
60
61 * 结束trace格式:`[类型标识符]|[进程号]|[级别与所属Tag集合]`
62
63一条完整的同步跟踪包括一个开始trace和一个结束trace,开始trace的`类型标识符`固定为`B`,结束trace的`类型标识符`固定为`E`。
64
65
66**异步跟踪**
67
68 * 起始trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]|[自定义聚类名称]|[自定义键值对]`
69
70 * 结束trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]`
71
72一条完整的异步跟踪也同样包含一个开始trace和一个结束trace,开始trace的`类型标识符`固定为`S`,结束trace的`类型标识符`固定为`F`。
73
74
75**整数值跟踪**
76
77 * trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容]|[整数值]|[级别与所属Tag集合]`
78
79一条整数值跟踪trace仅包含一条独立trace,其中trace的`类型标识符`固定为`C`。
80
81> **注意:**
82>
83> 1. 一条有效且完整的同步跟踪trace与异步跟踪trace,均包含一条起始trace和一条结束trace,开发者需要保证接口调用的匹配性,否则会导致性能跟踪异常问题。具体可参考ArkTS接口[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)或C++接口[capi-trace-h](../reference/apis-performance-analysis-kit/capi-trace-h.md)。
84> 2. 用户态trace总长度限制512字符,超过部分将被截断。
85
86
87### 字段说明
88
89本小节将详细介绍用户态trace的各个字段,包括字段组成、含义,字段与打点入参之间的关系,使用[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)作为参考。
90
91- **类型标识符**
92
93  类型标识符与调用的[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)具体接口相关,其映射关系如下:
94
95  - `B`:开启一个同步时间片跟踪事件。
96  - `E`:结束一个同步时间片跟踪事件。
97  - `S`:开启一个异步时间片跟踪事件。
98  - `F`:结束一个异步时间片跟踪事件。
99  - `C`:整数跟踪事件。
100
101- **分布式跟踪链路ID**
102
103  开启HiTraceChain(分布式跟踪)时,会将[HiTraceId](../reference/apis-performance-analysis-kit/capi-hitrace-hitraceid.md)核心信息记录在trace打点中,格式为`[ChainId,SpanId,ParentSpanId]`,结尾使用`#`分隔符与内容字段区分。
104
105  未开启HiTraceChain(分布式跟踪)时,打点不包含该字段。
106
107  - `ChainId`:HiTraceId的跟踪链标识。
108  - `SpanId`:HiTraceId的分支标识。
109  - `ParentSpanId`:HiTraceId的父分支标识。
110
111  HiTraceChain具体使用指导请参考[使用HiTraceChain打点(ArkTS)](hitracechain-guidelines-arkts.md)与[使用HiTraceChain打点(C/C++)](hitracechain-guidelines-ndk.md)。
112
113- **内容**
114
115  表示打点名称或整数变量名。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`name`入参。
116
117- **异步任务ID**
118
119  和内容字段合并用于匹配相同的异步跟踪trace的开始与结束打点。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`taskId`入参。
120
121- **整数值**
122
123  仅在整数值跟踪trace中包含,为跟踪的整数值。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`count`入参。
124
125- **级别与所属Tag集合**
126
127  本字段由级别和所属Tag集合两部分信息组成。
128
129  通过打点接口传入的`级别`信息,该部分为以下字符之一:`D`、`I`、`C`、`M`。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`level`入参,详细介绍及映射关系参考[HiTraceOutputLevel](#hitraceoutputlevel)。
130
131  所属Tag集合表示trace打点所属Tag类别,每类用两位数字表示,可包含多个从小到大排列的两位数字。
132
133  例如`B|1314|H:TestFunction|I3062`,其中`I`表示该条打点级别为`Info`,`3062`表示该条打点所属Tag集合,根据Tag名称与值的映射关系,参考[HiTraceMeter Tag](#hitracemeter-tag)可知`30`对应`ohos`Tag,`62`对应`app`Tag。
134
135  > **说明:**
136  >
137  > 1. 对于API version 19及之后接口,支持自定义输出级别;对于API version 18及之前接口,trace打点默认为`COMMERCIAL`级别打点。
138  >
139  > 2. 系统侧存在一条用户态trace隶属于多个Tag的情况,ArkTS接口[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)和C++接口[capi-trace-h](../reference/apis-performance-analysis-kit/capi-trace-h.md)提供的应用侧用户态trace打点功能无法指定`所属Tag集合`,对应Tag分类固定为`app`,字段值为`62`。
140
141
142- **自定义聚类名称**
143
144  可用于开发者自定义的聚类操作。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`customCategory`入参。该字段值可能为空,从而使得日志格式发生变化,详见[字段为空情况说明](#字段为空情况说明)。
145
146  在trace可视化工具中,同一进程中相同聚类名称的异步打点放在同一泳道上进行展示。
147
148- **自定义键值对**
149
150  格式为`key=value`,多个键值对使用逗号分隔,例如`key1=value1,key2=value2`。对应[@ohos.hiTraceMeter (性能打点)](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md)接口的`customArgs`入参。该字段值可能为空,从而使得日志格式发生变化,详见[字段为空情况说明](#字段为空情况说明)。
151
152  在trace可视化工具中,对满足格式要求的自定义键值对,以键值对形式展示解析结果。
153
154
155### 字段扩展规则
156
157API version 19及后续版本的新增字段,均以**竖线+字段**的方式,追加在当前用户态trace格式的末尾。
158
159
160### 各场景trace日志样例
161
162| 打点类型          | 开启HiTraceChain时格式                                       | 未开启HiTraceChain时格式                                     |
163| ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
164| 开始同步trace打点 | B\|1234\|H:[a92ab94c18e1341,0,0]#tracename\|M62\|user=root,type=2 | B\|1234\|H:tracename\|M62\|user=root,type=2                  |
165| 结束同步trace打点 | E\|1234\|M62                                                 | E\|1234\|M62                                                 |
166| 开始异步trace打点 | S\|1234\|H:[a92ab94c18e1341,0,0]#tracename\|428\|M62\|appcategory01\|user=root,type=2 | S\|1234\|H:tracename\|428\|M62\|appcategory01\|user=root,type=2 |
167| 结束异步trace打点 | F\|1234\|H:[a92ab94c18e1341,0,0]#tracename\|428\|M62         | F\|1234\|H:tracename\|428\|M62                               |
168| 整数trace打点     | C\|1234\|H:[a92ab94c18e1341,0,0]#tracename\|5678\|M62        | C\|1234\|H:tracename\|5678\|M62                              |
169
170上述trace日志样例中,进程号均为`1234`,打点内容均为`tracename`,级别均为`M`,代表`COMMERCIAL`级别,所属Tag集合均为`62`,仅包含一个Tag,对应的Tag名称为`app`。在开启HiTraceChain情况下,分布式跟踪链路ID为`[a92ab94c18e1341,0,0]`。同步trace与异步trace跟踪的自定义键值对均为`user=root,type=2`,其中异步trace打点的异步任务ID为`428`,自定义聚类名称为`appcategory01`。整数值跟踪的跟踪值为`5678`。
171
172> **说明:**
173>
174> 用户态trace总长度限制为512字符,建议`内容`、`自定义聚类名称`和`自定义键值对`参数总长度不超过420字符,避免被截断。
175
176### 字段为空情况说明
177
178如果用户态trace格式中间字段对应接口参数传入内容为空,用户态trace格式将保留`|`分隔符,如果尾部字段为空,用户态trace格式将不保留`|`分隔符。以[hiTraceMeter.startAsyncTrace()](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md#hitracemeterstartasynctrace19)和[hiTraceMeter.startSyncTrace()](../reference/apis-performance-analysis-kit/js-apis-hitracemeter.md#hitracemeterstartsynctrace19)接口的`自定义聚类名称`和`自定义键值对`参数为例,对应的格式参考如下。
179
180- 开始同步trace打点。
181
182  - `自定义键值对`字段不为空字符串。
183
184    ```text
185    B|[进程号]|H:[分布式跟踪链路ID]#[内容]|[级别与所属Tag集合]|[自定义键值对]
186    ```
187
188  - `自定义键值对`字段为空字符串。
189
190    ```text
191    B|[进程号]|H:[分布式跟踪链路ID]#[内容]|[级别与所属Tag集合]
192    ```
193
194- 开始异步trace打点。
195
196  - `自定义聚类名称`和`自定义键值对`字段均不为空字符串。
197
198    ```text
199    S|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]|[自定义聚类名称]|[自定义键值对]
200    ```
201
202  - `自定义聚类名称`字段为空字符串,`自定义键值对`字段不为空字符串。
203
204    ```text
205    S|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]||[自定义键值对]
206    ```
207
208  - `自定义聚类名称`字段不为空字符串,`自定义键值对`字段为空字符串。
209
210    ```text
211    S|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]|[自定义聚类名称]
212    ```
213
214  - `自定义聚类名称`和`自定义键值对`字段均为空字符串。
215
216    ```text
217    S|[进程号]|H:[分布式跟踪链路ID]#[内容]|[异步任务ID]|[级别与所属Tag集合]
218    ```
219
220### HiTraceMeter Tag
221
222以下为HitraceMeter用户态Tag集合,其中Tag值为实际代码层面基于数字1的左移值。用户态Tag可通过[“hitrace -l”命令](hitrace.md#查看hitrace包含的tag)查看其解释,其中`always`和`commercial`分别为系统侧默认常开Tag和商用版本场景定制Tag。
223
224| Tag名称            | 代码层常量值 | Tag值 |
225| ------------------ | ------------ | ----- |
226| always             | 1ULL << 0    | 00    |
227| commercial         | 1ULL << 5    | 05    |
228| drm                | 1ULL << 6    | 06    |
229| security           | 1ULL << 7    | 07    |
230| animation          | 1ULL << 9    | 09    |
231| push               | 1ULL << 10   | 10    |
232| virse              | 1ULL << 11   | 11    |
233| ffrt               | 1ULL << 13   | 13    |
234| musl               | 1ULL << 12   | 12    |
235| cloud              | 1ULL << 14   | 14    |
236| deviceauth         | 1ULL << 15   | 15    |
237| commonlibrary      | 1ULL << 16   | 16    |
238| hdcd               | 1ULL << 17   | 17    |
239| hdf                | 1ULL << 18   | 18    |
240| usb                | 1ULL << 19   | 19    |
241| interconn          | 1ULL << 20   | 20    |
242| dlpcre             | 1ULL << 21   | 21    |
243| accesscontrol      | 1ULL << 22   | 22    |
244| net                | 1ULL << 23   | 23    |
245| nweb               | 1ULL << 24   | 24    |
246| huks               | 1ULL << 25   | 25    |
247| useriam            | 1ULL << 26   | 26    |
248| daudio             | 1ULL << 27   | 27    |
249| dlsm               | 1ULL << 28   | 28    |
250| filemanagement     | 1ULL << 29   | 29    |
251| ohos               | 1ULL << 30   | 30    |
252| ability            | 1ULL << 31   | 31    |
253| zcamera            | 1ULL << 32   | 32    |
254| zmedia             | 1ULL << 33   | 33    |
255| zimage             | 1ULL << 34   | 34    |
256| zaudio             | 1ULL << 35   | 35    |
257| distributeddatamgr | 1ULL << 36   | 36    |
258| mdfs               | 1ULL << 37   | 37    |
259| graphic            | 1ULL << 38   | 38    |
260| ace                | 1ULL << 39   | 39    |
261| notification       | 1ULL << 40   | 40    |
262| misc               | 1ULL << 41   | 41    |
263| multimodalinput    | 1ULL << 42   | 42    |
264| sensors            | 1ULL << 43   | 43    |
265| msdp               | 1ULL << 44   | 44    |
266| dsoftbus           | 1ULL << 45   | 45    |
267| rpc                | 1ULL << 46   | 46    |
268| ark                | 1ULL << 47   | 47    |
269| window             | 1ULL << 48   | 48    |
270| account            | 1ULL << 49   | 49    |
271| dscreen            | 1ULL << 50   | 50    |
272| dcamera            | 1ULL << 51   | 51    |
273| dhfwk              | 1ULL << 52   | 52    |
274| gresource          | 1ULL << 53   | 53    |
275| devicemanager      | 1ULL << 54   | 54    |
276| samgr              | 1ULL << 55   | 55    |
277| power              | 1ULL << 56   | 56    |
278| dsched             | 1ULL << 57   | 57    |
279| deviceprofile      | 1ULL << 58   | 58    |
280| dinput             | 1ULL << 59   | 59    |
281| bluetooth          | 1ULL << 60   | 60    |
282| accessibility      | 1ULL << 61   | 61    |
283| app                | 1ULL << 62   | 62    |
284
285### HiTraceOutputLevel
286
287| trace输出级别枚举名称(C/C++) | trace输出级别枚举名称(ArkTS) | 枚举值 | trace级别 |
288| ------------------------------ | ------------------------------ | ------ | --------- |
289| HITRACE_LEVEL_DEBUG            | DEBUG                          | 0      | D         |
290| HITRACE_LEVEL_INFO             | INFO                           | 1      | I         |
291| HITRACE_LEVEL_CRITICAL         | CRITICAL                       | 2      | C         |
292| HITRACE_LEVEL_COMMERCIAL       | COMMERCIAL                     | 3      | M         |
293
294
295### API version 19前用户态trace格式
296
297**同步跟踪**
298
299 * 开始trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容]`
300
301 * 结束trace格式:`[类型标识符]|[进程号]`
302
303
304**异步跟踪**
305
306 * 开始trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容] [异步任务ID]`
307
308 * 结束trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容] [异步任务ID]`
309
310
311**整数值跟踪**
312
313 * trace格式:`[类型标识符]|[进程号]|H:[分布式跟踪链路ID]#[内容] [整数值]`
314
315> **说明:**
316>
317> 异步跟踪trace的开始trace格式与结束trace格式一样。需要注意的是 API version 19以前的版本,异步跟踪trace的`异步任务ID`字段、整数值跟踪的`整数值`字段与`内容`字段使用空格进行分隔。
318
319### API version 19前各场景trace日志样例
320
321| 打点类型            | 开启HiTraceChain时格式                          | 未开启HiTraceChain时格式  |
322| ------------------- | ----------------------------------------------- | ------------------------- |
323| 开始同步trace打点   | B\|1234\|H:[a92ab94c18e1341,0,0]#tracename      | B\|1234\|H:tracename      |
324| 结束同步trace打点   | E\|1234\|                                       | E\|1234\|                 |
325| 开始异步trace打点   | S\|1234\|H:[a92ab94c18e1341,0,0]#tracename 428  | S\|1234\|H:tracename 428  |
326| 结束异步trace打点   | F\|1234\|H:[a92ab94c18e1341,0,0]#tracename 428  | F\|1234\|H:tracename 428  |
327| 整数值跟踪trace打点 | C\|1234\|H:[a92ab94c18e1341,0,0]#tracename 5678 | C\|1234\|H:tracename 5678 |
328
329上述trace日志样例中,进程号为`1234`,打点内容均为`tracename`。开启HiTraceChain情况下,分布式跟踪链路ID为`[a92ab94c18e1341,0,0]`。其中异步trace打点的异步任务ID为`428`,整数值跟踪的跟踪值为`5678`。