1# hidumper 2 3<!--Kit: Performance Analysis Kit--> 4<!--Subsystem: HiviewDFX--> 5<!--Owner: @m0_55013956--> 6<!--Designer: @milkbread123--> 7<!--Tester: @gcw_KuLfPSbe--> 8<!--Adviser: @foryourself--> 9 10HiDumper是用于统一系统信息导出的命令行工具,支持分析CPU、内存、存储等系统资源使用情况,查询系统服务运行情况,定位资源使用异常、通信等相关问题。 11 12 13针对HiDumper所支撑的使用场景,本章节将介绍其查询内存信息、查询CPU使用情况、查询系统能力、查询进程信息、查询存储信息、查询系统信息等基础功能,以及系统故障日志获取,进程间通信记录导出,导出信息支持压缩转储等能力。 14 15 16HiDumper命令行工具使用常见问题汇总在[常见问题](#常见问题)章节。 17 18 19## 环境要求 20 21- 根据hdc命令行工具指导,完成[环境准备](hdc.md#环境准备)。 22 23- 请确保设备已正常连接,并执行hdc shell。 24 25 26## 命令行说明 27 28| 选项 | 说明 | 29| -------- | -------- | 30| -h | 帮助命令。 | 31| [-lc](#查询系统信息) | 列出系统信息簇。 | 32| [-ls](#查询系统服务列表) | 列出正在运行的系统能力。 | 33| [-c](#查询系统信息) | 获取系统全量信息簇详细信息,包含设备信息、内核信息和环境变量等。 | 34| [-c [base system]](#查询系统信息) | 获取指定信息簇详细信息,可选"base"或者"system"。 | 35| [-s](#获取系统服务详细信息) | 获取所有系统能力详细信息。 | 36| [-s [SA0 SA1]](#获取系统服务详细信息) | 获取一个或多个系统能力的详细信息。多个系统能力名称之间使用空格分隔。可通过 -ls 查询系统能力名称。 | 37| [-s [SA] -a ["option"]](#获取指定系统服务提供的能力) | 执行单个系统能力的特定选项。<br />SA:系统能力名称。<br />option:该系统能力支持的选项。可通过 -s [SA] -a ["-h"] 获取单个系统能力支持的所有选项。 | 38| [-e](#获取系统故障日志) | 获取记录的故障日志。输出日志的规格可参考:[CppCrash](cppcrash-guidelines.md#日志规格)、[JSCrash](jscrash-guidelines.md#日志规格)、[AppFreeze](appfreeze-guidelines.md#日志规格)。 | 39| [--net [pid]](#查询网络信息) | 获取网络信息,包含网络流量、网络接口统计、IP信息等。如果指定了进程的pid,则只输出该进程的网络流量使用信息。 | 40| [--storage [pid]](#查询存储信息) | 获取存储信息,包含磁盘统计、磁盘使用量、文件句柄等信息。如果指定了进程的pid,则只显示该进程的io信息。 | 41| [-p [pid]](#查询进程信息) | 获取进程信息,包括进程和线程的列表和信息。 | 42| [--cpuusage [pid]](#查询进程cpu使用率) | 获取CPU使用率,取值范围(0, CPU核数],按进程和类别分类;如果指定pid,则获取指定pid的CPU使用率。 | 43| [--cpufreq](#查询cpu频率) | 获取CPU每个核的真实频率,单位:kHz。 | 44| [--mem [--prune]](#查询整机内存) | 获取总内存使用情况。如果指定--prune,只导出精简的内存使用情况。<br />**说明**:从API version 20开始,支持--prune参数。 | 45| [--mem pid [--show-ashmem] [--show-dmabuf]](#查询进程内存) | 获取指定pid的进程内存使用情况。<br />指定 --show-ashmem,则补充打印该进程的ashmem使用详细信息。<br />如果是应用进程,指定--show-dmabuf,则补充打印DMA内存详情信息。<br />**说明**:从API version 20开始,支持--show-ashmem、--show-dmabuf参数。 | 46| [--zip](#导出信息压缩存储) | 保存命令输出到 /data/log/hidumper 下的压缩文件,压缩格式为 ZIP。 | 47| [--ipc [pid]/-a --start-stat/stat/--stop-stat](#获取进程间通信信息) | 统计一段时间进程IPC信息。如果使用-a,则统计所有进程IPC数据。使用--start-stat开始统计,使用--stat获取统计数据,使用--stop-stat结束统计。 | 48| [--mem-smaps pid [-v]](#查询进程内存) | 获取pid内存统计信息,数据来源于/proc/pid/smaps,使用-v指定更多详细信息。(仅支持导出[debug版本应用](performance-analysis-kit-terminology.md#debug版本应用))<br />**说明**:从API version 20开始,支持该参数。 | 49| [--mem-jsheap pid [-T tid] [--gc] [--leakobj] [--raw]](#查询虚拟机堆内存) | 必选参数pid。触发ArkTS应用JS线程的gc和堆内存快照导出。指定线程tid时,仅触发该线程的gc和堆内存快照导出;指定--gc时,仅触发gc,不导出快照;指定--leakobj时,应用开启泄露检测可获取泄露对象列表。<br>文件命名格式为:<!--RP1-->jsheap-进程号-JS线程号-时间戳<!--RP1End-->,文件内容为JSON结构的JS堆快照。<br>指定--raw时,堆快照以rawheap格式导出。<br />**说明**:从API version 19开始,支持--raw参数。 | 50| <!--DelRow-->[--mem-cjheap pid [--gc]](#查询虚拟机堆内存) | pid为必选参数。触发仓颉应用gc和堆内存快照导出。如果指定--gc,只触发gc不做快照导出。<br />**说明**:从API version 20开始,支持该参数。 | 51 52## 查询内存信息 53 54HiDumper内存信息查询模块主要用于查看系统整机内存使用情况和单个进程内存使用情况。开发者需要了解相关的[内存基础知识](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-memory-basic-knowledge)。 55 56### 查询整机内存 57 58可使用hidumper --mem命令获取整机内存使用情况。 59 60打印效果为: 61 62``` 63$ hidumper --mem 64-------------------------------[memory]------------------------------- 65Total Memory Usage by PID: 66PID Total Pss(xxx in SwapPss) Total Vss Total Rss Total Uss GL Graph Dma PurgSum PurgPin Name 671 4309(2216 in SwapPss) kB 2158196 kB 4180 kB 1760 kB 0 kB 0 kB 0 kB 0 kB 0 kB init 682 45613(0 in SwapPss) kB 17452952 kB 48352 kB 44088 kB 0 kB 0 kB 0 kB 0 kB 0 kB sysmgr-main 69... 70Total Memory Usage by Size: 71PID Total Pss(xxx in SwapPss) Total Vss Total Rss Total Uss GL Graph Dma PurgSum PurgPin Name 723031 421826(0 in SwapPss) kB 5199308 kB 610812 kB 395712 kB 0 kB 17000 kB 17000 kB 0 kB 0 kB xxx 731473 409349(0 in SwapPss) kB 7014040 kB 449460 kB 389528 kB 160336 kB 57092 kB 57092 kB 0 kB 0 kB xxx 74... 75Total Pss by OOM adjustment: 76System: 1426777 kB 77 xxx(pid=1473): 409349 kB 78 xxx(pid=992): 80734 kB (23720 kB in SwapPss) 79... 80Total Pss by Category: 81File-backed Page(1414160 kB): 82 1053457 kB : .so 83 322813 kB : other 84 25616 kB : .hap 85 8064 kB : .ttf 86 3696 kB : .db 87 514 kB : dev 88Anonymous Page(2280332 kB): 89 1348463 kB : native heap 90 518107 kB : ark ts heap 91 361195 kB : other 92 49287 kB : stack 93 3280 kB : dev 94 0 kB : guard 95GPU(160340 kB): 96 160340 kB : GL 97Graph(350708 kB): 98 350708 kB : Graph 99DMA(350708 kB): 100 350708 kB : Dma 101 102 Total RAM:15803612 kB 103 Free RAM:10287099 kB (3999535 cached + 6287564 free) 104 Used RAM:3961668 kB (3163324 total pss + 798344 kernel) 105 Lost RAM:2086013 kB 106 107Total RAM by Category: 108hidumper - Hardware Usage:1860480 kB 109 CMA Usage:0 kB 110- Kernel Usage:656937 kB 111Processes Usage:3694492 kB 112 113Total Purgeable: 114 Total PurgSum:0 kB 115 Total PurgPin:0 kB 116``` 117 118VSS (Virtual Set Size)表示当前进程虚拟内存的大小,包括所有映射到该进程地址空间的内存区域。 119 120RSS (Resident Set Size)表示当前进程实际驻留在物理内存中的内存大小。 121 122PSS (Proportional Set Size)是一种更精确的内存使用度量方法,它将共享库所占的内存按比例分配给每个使用该库的进程。 123 124PurgSum(Purgeable Summary)表示当前进程可回收内存的总量。 125 126PurgPin(Purgeable Pinned)表示可回收但暂时无法立即回收的内存。 127 128GL代表GPU内存,包含应用使用的GPU内存和统一渲染在服务进程内产生的GPU内存。 129 130Graph代表图形内存,即DMA内存。 131 132可使用hidumper --mem --prune命令获取整机内存精简的使用情况。 133 134打印效果为: 135 136```shell 137$ hidumper --mem --prune 138-------------------------------[memory]------------------------------- 139Total Memory Usage by PID: 140PID Total Pss(xxx in SwapPss) GL AdjLabel Name 1411 4061(1668 in SwapPss) kB 0 kB -1000 xxx 1422 101723(0 in SwapPss) kB 0 kB -1000 xxx 143... 144``` 145 146AdjLabel代表该进程内存的回收优先级,取值范围为[-1000, 1000],该值越大则表示该进程越不重要,内存会被优先回收。 147 148 149### 查询进程内存 150 151可使用hidumper --mem pid命令获取指定进程的内存使用情况,pid为指定的进程号。 152 153使用样例: 154 155```shell 156$ hidumper --mem 27336 157 158-------------------------------[memory]------------------------------- 159 160 Pss Shared Shared Private Private Swap SwapPss Heap Heap Heap 161 Total Clean Dirty Clean Dirty Total Total Size Alloc Free 162 ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) 163 ------------------------------------------------------------------------------------------------------------------------------------------------------ 164 GL 0 0 0 0 0 0 0 0 0 0 165 Graph 0 0 0 0 0 0 0 0 0 0 166 ark ts heap 12676 5516 0 12468 0 3068 3068 0 0 0 167 guard 0 0 0 0 0 0 0 0 0 0 168 native heap 15427 27132 0 14424 0 18776 18776 55796 53564 2809 169 .hap 4 0 0 4 0 0 0 0 0 0 170AnonPage other 1109 4932 0 968 0 4280 4280 0 0 0 171 stack 1404 0 0 1404 0 28 28 0 0 0 172 .db 32 0 0 32 0 0 0 0 0 0 173 .so 12877 58928 18868 5628 2028 1036 1036 0 0 0 174 dev 52 0 284 52 0 0 0 0 0 0 175 .ttf 296 1264 0 0 0 0 0 0 0 0 176FilePage other 21933 1432 4300 21524 148 0 0 0 0 0 177-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 178 Total 92998 99204 23452 56504 2176 27188 27188 55796 53564 2809 179 180native heap: 181 jemalloc meta: 1010 276 0 1000 0 156 156 0 0 0 182 jemalloc heap: 13126 22412 0 12260 0 17876 17876 0 0 0 183 brk heap: 1259 4444 0 1132 0 744 744 0 0 0 184 musl heap: 32 0 0 32 0 0 0 0 0 0 185 186Purgeable: 187 PurgSum:0 kB 188 PurgPin:0 kB 189 190DMA: 191 Dma:0 kB 192 193Ashmem: 194Total Ashmem:144 kB 195``` 196 197可使用hidumper --mem pid --show-ashmem获取指定pid的内存使用情况,同时打印ashmem使用详细信息。 198 199使用样例: 200 201```shell 202$ hidumper --mem 27336 --show-ashmem 203-------------------------------[memory]------------------------------- 204 205 Pss Shared Shared Private Private Swap SwapPss Heap Heap Heap 206 Total Clean Dirty Clean Dirty Total Total Size Alloc Free 207 ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) 208 ------------------------------------------------------------------------------------------------------------------------------------------------------ 209 GL 0 0 0 0 0 0 0 0 0 0 210 Graph 0 0 0 0 0 0 0 0 0 0 211 ark ts heap 12657 5516 0 12468 0 3068 3068 0 0 0 212 guard 0 0 0 0 0 0 0 0 0 0 213 native heap 15191 27132 0 14252 0 18780 18780 55792 53527 2629 214 .hap 4 0 0 4 0 0 0 0 0 0 215AnonPage other 1094 4932 0 964 0 4280 4280 0 0 0 216 stack 1388 0 0 1388 0 28 28 0 0 0 217 .db 32 0 0 32 0 0 0 0 0 0 218 .so 12557 59184 18868 5372 2028 1036 1036 0 0 0 219 dev 52 0 284 52 0 0 0 0 0 0 220 .ttf 296 1264 0 0 0 0 0 0 0 0 221FilePage other 21916 1432 4300 21524 148 0 0 0 0 0 222-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 223 Total 92379 99460 23452 56056 2176 27192 27192 55792 53527 2629 224 225native heap: 226 jemalloc meta: 1008 276 0 1000 0 156 156 0 0 0 227 jemalloc heap: 12892 22412 0 12088 0 17880 17880 0 0 0 228 brk heap: 1259 4444 0 1132 0 744 744 0 0 0 229 musl heap: 32 0 0 32 0 0 0 0 0 0 230 231Purgeable: 232 PurgSum:0 kB 233 PurgPin:0 kB 234 235DMA: 236 Dma:0 kB 237 238Ashmem: 239Total Ashmem:144 kB 240Process_name Process_ID Fd Cnode_idx Applicant_Pid Ashmem_name Virtual_size Physical_size magic -> 详细ashmem信息 241wei.xxx.xxx 27336 72 328415 27336 dev/ashmem/Paf.Permission.appImg 147456 147456 14105 242``` 243 244使用hidumper --mem pid --show-dmabuf命令可获取指定PID的内存使用情况,并打印DMA内存详细信息。 245 246使用样例: 247 248```shell 249$ hidumper --mem 27336 --show-dmabuf 250-------------------------------[memory]------------------------------- 251 252 Pss Shared Shared Private Private Swap SwapPss Heap Heap Heap 253 Total Clean Dirty Clean Dirty Total Total Size Alloc Free 254 ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) ( kB ) 255 ------------------------------------------------------------------------------------------------------------------------------------------------------ 256 GL 0 0 0 0 0 0 0 0 0 0 257 Graph 0 0 0 0 0 0 0 0 0 0 258 ark ts heap 12657 5516 0 12468 0 3068 3068 0 0 0 259 guard 0 0 0 0 0 0 0 0 0 0 260 native heap 15191 27132 0 14252 0 18780 18780 55792 53527 2629 261 .hap 4 0 0 4 0 0 0 0 0 0 262AnonPage other 1094 4932 0 964 0 4280 4280 0 0 0 263 stack 1388 0 0 1388 0 28 28 0 0 0 264 .db 32 0 0 32 0 0 0 0 0 0 265 .so 12557 59184 18868 5372 2028 1036 1036 0 0 0 266 dev 52 0 284 52 0 0 0 0 0 0 267 .ttf 296 1264 0 0 0 0 0 0 0 0 268FilePage other 21916 1432 4300 21524 148 0 0 0 0 0 269-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 270 Total 92379 99460 23452 56056 2176 27192 27192 55792 53527 2629 271 272native heap: 273 jemalloc meta: 1008 276 0 1000 0 156 156 0 0 0 274 jemalloc heap: 12892 22412 0 12088 0 17880 17880 0 0 0 275 brk heap: 1259 4444 0 1132 0 744 744 0 0 0 276 musl heap: 32 0 0 32 0 0 0 0 0 0 277 278Purgeable: 279 PurgSum:0 kB 280 PurgPin:0 kB 281 282DMA: 283 Dma:0 kB 284Process pid fd size_bytes ino exp_pid exp_task_comm buf_name exp_name buf_type leak_type 285m.xxx.xxx 7612 87 40960 2750 1424 allocatxxxx RSxxxxxx xxxxx xx xxxx 286 287Ashmem: 288Total Ashmem:144 kB 289``` 290字段说明: 291 292| 字段 | 说明 | 293| -------- | -------- | 294| Process | 持有ION内存块的应用进程包名(16个字符截断)。 | 295| pid | 发生故障进程pid。 | 296| fd | 进程持有的句柄。 | 297| size_bytes | 进程持有的ION内存buffer大小,单位:B。 | 298| ino | 文件inode号(索引节点号)。 | 299| exp_pid | 从内核申请ION内存的进程pid。 | 300| exp_task_comm | 从内核申请ION内存的进程名。 | 301| buf_name | ION内存的buffer名字。 | 302| exp_name | ION内存的buffer扩展名。 | 303| buf_type | ION内存的buffer类型。 | 304| leak_type | ION内存泄漏维测的buffer类型。 | 305 306可使用hidumper --mem-smaps pid命令获取指定进程的详细内存使用情况,该命令会累加相同内存段的内存值。 307 308使用样例: 309 310```txt 311$ hidumper --mem-smaps 3456 # 3456 为目标可调试应用进程号 312 313-------------------------------[memory]------------------------------- 314 315 Shared Shared Private Private 316Size Rss Pss Clean Dirty Clean Dirty Swap SwapPss Counts Category Name 31716 0 0 0 0 0 0 4 4 3 FilePage other [anon] 3188 8 8 0 0 8 0 0 0 1 FilePage other /bin/init 3192048 52 0 0 52 0 0 0 0 1 dev /dev/__parameters__/param_sec_dac 32080 28 1 0 28 0 0 0 0 1 dev /dev/__parameters__/param_selinux 321... 322``` 323 324统计信息说明: 325 326| 字段 | 说明 | 327| -------- | -------- | 328| Counts | 相同内存段出现的次数。 | 329| Category | 内存所属类别。 | 330 331可使用hidumper --mem-smaps pid -v命令获取指定进程的详细内存使用情况,该命令会直接打印进程的所有内存信息,不会对相同内存信息做二次处理。 332 333 334使用样例: 335 336```txt 337$ hidumper --mem-smaps 3456 -v # 3456 为目标可调试应用进程号 338 339-------------------------------[memory]------------------------------- 340 Shared Shared Private Private 341Size Rss Pss Clean Dirty Clean Dirty Swap SwapPss Category Name 3424 4 2 0 4 0 0 0 0 FilePage other [anon] 3434 4 2 0 4 0 0 0 0 FilePage other /bin/init 344... 345``` 346 347**注意事项** 348 349hidumper --mem-smaps [pid] [-v]命令调试的进程应为“使用调试证书签名的应用”,同[debug版本应用](performance-analysis-kit-terminology.md#debug版本应用)。 350 351要确认命令指定的应用是否为可调试应用,可以执行以下命令进行查询:hdc shell "bm dump -n [应用包名] | grep appProvisionType"查询,预期返回信息为"appProvisionType": "debug"。 352 353以包名com.example.myapplication为例,可执行如下命令查询: 354 355```shell 356hdc shell "bm dump -n com.example.myapplication | grep appProvisionType" 357``` 358 359如包名对应的应用是可调试应用,预期返回信息: 360 361```shell 362"appProvisionType": "debug", 363``` 364 365构建可调试应用需要使用调试证书进行签名,申请调试证书及签名可参考:[申请调试证书](https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-debugcert-0000001914263178)。 366 367 368### 查询虚拟机堆内存 369 370<!--RP2--> 371使用hidumper --mem-jsheap pid [-T tid] [--gc] [--leakobj] [--raw]命令可以查看ArkTS应用虚拟机堆内存,使用hidumper --mem-cjheap pid [--gc]命令可以查看仓颉应用虚拟机堆内存。生成的堆内存文件存放于/data/log/faultlog/temp目录。 372<!--RP2End--> 373 374> **注意:** 375> 376> hidumper --mem-jsheap pid [-T tid] [--gc] [--leakobj] [--raw]命令调试的进程应为“使用调试证书签名的应用”,同[debug版本应用](performance-analysis-kit-terminology.md#debug版本应用)。 377> 378> 确认命令指定的应用是否为可调试应用:参考上述hidumper --mem-smaps [pid] [-v]命令中的注意事项。 379 380- 可使用hidumper --mem-jsheap pid命令获取指定进程所有JS线程的虚拟机堆内存,文件命名为:<!--RP1-->jsheap-进程号-JS线程号-时间戳<!--RP1End-->,如果有多个JS线程会生成多个文件。 381 382 使用样例: 383 384 <!--RP3--> 385 ```shell 386 $ hidumper --mem-jsheap 64949 -> 64949 为目标应用进程号 387 $ ls | grep jsheap -> 进入堆内存文件存放目录后执行 388 jsheap-64949-64949-1751075546050 389 jsheap-64949-64989-1751075546050 390 ``` 391 <!--RP3End--> 392 393- 可使用hidumper --mem-jsheap pid -T tid命令获取指定进程指定JS线程的虚拟机堆内存,文件命名为:<!--RP1-->jsheap-进程号-JS线程号-时间戳<!--RP1End-->。 394 395 使用样例: 396 397 <!--RP4--> 398 ```shell 399 $ hidumper --mem-jsheap 64949 -T 64949 -> 64949 为目标应用进程号 400 $ ls | grep jsheap -> 进入堆内存文件存放目录后执行 401 jsheap-64949-64949-1751075567710 402 ``` 403 <!--RP4End--> 404 405- 可使用hidumper --mem-jsheap pid [-T tid] --raw获取指定进程或指定JS线程的虚拟机堆内存,生成的堆内存文件为rawheap格式,文件命名为<!--RP1-->jsheap-进程号-JS线程号-时间戳<!--RP1End-->.rawheap。rawheap的解析转换可参考使用:[rawheap-translator工具](../tools/rawheap-translator.md)。 406 407 使用样例: 408 409 <!--RP5--> 410 ```shell 411 $ hidumper --mem-jsheap 64949 --raw -> 64949 为目标应用进程号 412 $ ls | grep jsheap -> 进入堆内存文件存放目录后执行 413 jsheap-64949-64949-1751075546050.rawheap 414 jsheap-64949-64989-1751075546050.rawheap 415 $ hidumper --mem-jsheap 64949 -T 64949 --raw -> 64949 为目标应用进程号 416 $ ls | grep jsheap 417 jsheap-64949-64949-1751075546055.rawheap 418 ``` 419 <!--RP5End--> 420 421- 可使用hidumper --mem-jsheap pid --gc命令触发指定应用进程GC。该命令不会生成任何文件,执行成功不会有命令回显。 422 423 使用样例: 424 425 ```shell 426 $ hidumper --mem-jsheap 64949 --gc -> 64949 为目标应用进程号 427 ``` 428 429- 可使用hidumper --mem-jsheap pid --leakobj获取指定进程的虚拟机堆内存和泄漏对象信息,文件命名为:<!--RP6-->leaklist-进程号-时间戳<!--RP6End-->。 430 431 获取指定进程的虚拟机堆内存和泄露对象信息的前提是应用已通过[@ohos.hiviewdfx.jsLeakWatcher (js泄露检测)](../reference/apis-performance-analysis-kit/js-apis-jsleakwatcher.md)接口开启了泄漏检测功能。 432 433 具体使用步骤为: 434 435 1. 应用调用[jsLeakWatcher.enable](../reference/apis-performance-analysis-kit/js-apis-jsleakwatcher.md#jsleakwatcherenable)接口。 436 2. 应用调用[jsLeakWatcher.watch](../reference/apis-performance-analysis-kit/js-apis-jsleakwatcher.md#jsleakwatcherwatch)接口。 437 3. 执行hidumper --mem-jsheap [pid] --leakobj命令,导出虚拟机堆内存和泄漏对象信息。 438 439 使用样例: 440 441 <!--RP7--> 442 ```shell 443 $ hidumper --mem-jsheap 64949 --leakobj 444 $ ls | grep leaklist 445 leaklist-64949-1730873210483 446 ``` 447 <!--RP7End--> 448 449<!--Del--> 450- 可使用hidumper --mem-cjheap pid命令获取指定仓颉进程的虚拟机堆内存,文件命名为:cjheap-进程号-时间戳。 451 452 使用样例: 453 454 ```shell 455 $ hidumper --mem-cjheap 65012 -> 65012 为目标应用进程号 456 $ ls | grep cjheap -> 进入堆内存文件存放目录后执行 457 cjheap-65012-1751075546050 458 ``` 459 460- 可使用hidumper --mem-cjheap pid --gc命令触发指定仓颉应用进程GC。该命令不会生成任何文件,执行成功不会有命令回显。 461 462 使用样例: 463 464 ```shell 465 $ hidumper --mem-cjheap 65012 --gc -> 65012 为目标应用进程号 466 ``` 467<!--DelEnd--> 468上述生成的文件,可以通过hdc[文件传输](hdc.md#文件传输)命令从设备中获取。 469 470 471## 查询CPU使用情况 472 473使用hidumper工具查看CPU相关信息,可以了解到当前系统的CPU负载情况。 474 475 476### 查询整机CPU使用率 477 478可使用hidumper --cpuusage获取整机CPU使用率。 479 480打印效果为: 481 482```shell 483$ hidumper --cpuusage 484 485-------------------------------[cpuusage]------------------------------- 486 487Load average: 12.1 / 12.2 / 12.1; the cpu load average in 1 min, 5 min and 15 min 488CPU usage from 2024-11-06 11:59:33 to 2024-11-06 11:59:38 489Total: 6.38%; User Space: 2.57%; Kernel Space: 3.81%; iowait: 0.02%; irq: 0.14%; idle: 93.46% 490Details of Processes: 491 PID Total Usage User Space Kernel Space Page Fault Minor Page Fault Major Name 492 105 109.01% 0.00% 109.01% 164 0 tppmgr.elf 493 2 0.89% 0.00% 0.89% 0 0 sysmgr-main 494... 495``` 496 497 498### 查询进程CPU使用率 499 500可使用hidumper --cpuusage pid获取指定进程的CPU使用率。 501 502打印效果为: 503 504```shell 505$ hidumper --cpuusage 1 506 507-------------------------------[cpuusage]------------------------------- 508 509Load average: 12.1 / 12.2 / 12.1; the cpu load average in 1 min, 5 min and 15 min 510CPU usage from 2024-11-06 11:59:33 to 2024-11-06 11:59:35 511Total: 3.80%; User Space: 1.45%; Kernel Space: 2.35%; iowait: 0.00%; irq: 0.14%; idle: 96.06% 512Details of Processes: 513 PID Total Usage User Space Kernel Space Page Fault Minor Page Fault Major Name 514 1 0.00% 0.00% 0.00% 38368 1394 init 515``` 516 517 518### 查询CPU频率 519 520可使用hidumper --cpufreq获取CPU频率信息。 521 522打印效果为: 523 524```shell 525$ hidumper --cpufreq 526 527-------------------------------[cpufreq]------------------------------- 528 529 530cmd is: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 531 5321018000 533 534cmd is: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 535 5361530000 537... 538``` 539 540 541## 查询系统服务 542 543 544### 查询系统服务列表 545 546- 可使用hidumper -ls命令获取正在运行的系统服务列表。 547 548打印效果为: 549 550```shell 551$ hidumper -ls 552System ability list: 553SystemAbilityManager RenderService AbilityManagerService 554DataObserverMgr AccountMgr AIEngine 555BundleMgr FormMgr ApplicationManagerService 556AccessibilityManagerService UserIdmService UserAuthService 557AuthExecutorMgrService PinAuthService FaceAuthService 558FingerprintAuthService WifiDevice WifiHotspot 559WifiP2p WifiScan 1125 5601126 BluetoothHost NetConnManager 561NetPolicyManager NetStatsManager NetTetheringManager 562... 563``` 564 565 566### 获取系统服务详细信息 567 568- 可使用hidumper -s获取所有系统服务的详细信息。 569 570打印效果为: 571 572```shell 573$ hidumper -s 574 575-------------------------------[ability]------------------------------- 576 577 578----------------------------------SystemAbilityManager---------------------------------- 579The arguments are illegal and you can enter '-h' for help. 580 581-------------------------------[ability]------------------------------- 582 583 584----------------------------------RenderService---------------------------------- 585------Graphic2D--RenderService ------ 586Usage: 587h |help text for the tool 588... 589``` 590 591 592- 可使用hidumper -s [SA0] [SA1]获取指定的一个或多个系统服务的详细信息。其中系统能力名[SA0] [SA1]可通过上述hidumper -ls命令查询得到。 593 594 595打印效果为: 596 597 598```shell 599$ hidumper -s WindowManagerService 600 601-------------------------------[ability]------------------------------- 602 603 604----------------------------------WindowManagerService---------------------------------- 605Usage: 606-h |help text for the tool 607-a |dump all window information in the system 608-w {window id} [ArkUI Option] |dump specified window information 609------------------------------------[ArkUI Option]------------------------------------ 610... 611$ hidumper -s WindowManagerService RenderService 612 613-------------------------------[ability]------------------------------- 614 615 616----------------------------------WindowManagerService---------------------------------- 617Usage: 618-h |help text for the tool 619-a |dump all window information in the system 620-w {window id} [ArkUI Option] |dump specified window information 621------------------------------------[ArkUI Option]------------------------------------ 622 623 624-------------------------------[ability]------------------------------- 625 626 627----------------------------------RenderService---------------------------------- 628------Graphic2D--RenderService ------ 629Usage: 630h |help text for the tool 631screen |dump all screen information in the system 632surface |dump all surface information 633composer fps |dump the fps info of composer 634... 635``` 636 637 638### 获取指定系统服务提供的能力 639 640 641可使用hidumper -s [SA] -a ["option"]可以获取指定系统服务提供的能力。 642 643 644以RenderService系统渲染服务为例,获取其使用帮助,打印效果如下: 645 646 647```shell 648$ hidumper -s RenderService -a "h" 649 650-------------------------------[ability]------------------------------- 651 652----------------------------------RenderService---------------------------------- 653------ Graphic2D--RenderSerice ------ 654Usage: 655gles |inquire gpu info 656h |help text for the tool 657allInfo |dump all info 658fpsCount |dump the refresh rate counts info 659surfacenode |surfacenode [id] 660trimMem |dump trim Mem info 661surface |dump all surface information 662MultiRSTrees |dump multi RS Trees info 663fpsClear |[surface name]/composer fpsClear, clear the fps info 664dumpMem |dump Cache 665allSurfacesMem |dump surface mem info 666RSTree |dump RS Tree info 667rsLogFlag |set rs log flag 668nodeNotOnTree |dump nodeNotOnTree info 669client |dump client ui node trees 670clearFpsCount |clear the refresh rate counts info 671hitchs |[windowname] hitchs, dump the hitchs info of window 672vktextureLimit |dump vk texture limit info 673EventParamList |dump EventParamList info 674dumpNode |dump render node info 675dumpExistPidMem |dumpExistPidMem [pid], dump exist pid mem info 676fps |[windowname] fps, dump the fps info of window 677flushJankStatsRs |flush rs jank stats hisysevent 678screen |dump all screen infomation in the system 679``` 680 681 682系统服务提供的具体功能,如获取GPU相关信息,可以使用以下命令,打印结果如下: 683 684```shell 685$ hidumper -s RenderService -a "gles" 686 687-------------------------------[ability]------------------------------- 688 689 690----------------------------------RenderService---------------------------------- 691 692-- DumpGpuInfo: 693GL_VENDOR: HUAWEI 694GL_RENDERER: Maleoon 910 695GL_VERSION: OpenGL ES 3.2 B283 696GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.20 697``` 698 699 700## 查询进程信息 701 702可使用hidumper -p [pid]命令获取指定进程的相关信息,包括进程的挂载信息,进程的线程信息,线程的运行时间,进程等待通道信息。 703 704 705> **注意:** 706> 707> hidumper -p [pid]命令调试的进程应为“使用调试证书签名的应用”。 708> 709> 确认命令指定的应用是否为可调试应用:参考hidumper --mem-smaps [pid] [-v]命令中的介绍。 710 711 712打印效果为: 713 714 715```shell 716$ hidumper -p 64949 717 718-------------------------------[processes]------------------------------- 719 720 721cmd is: ps -efT -p 64949 722 723UID PID TID PPID TCNT STIME TTY TIME CMD 72420020169 64949 64949 629 17 11:40:14 ? 00:00:00 com.example.jsleakwatcher 72520020169 64949 733 629 17 11:40:28 ? 00:00:00 com.example.jsleakwatcher 726... 727$ hidumper -p 728 729-------------------------------[processes]------------------------------- 730 731 732cmd is: ps -efT 733 734UID PID TID PPID TCNT STIME TTY TIME CMD 735root 1 1 0 1 10:46:59 ? 00:00:08 init --second-stage 2389791 736root 2 2 0 127 10:46:59 ? 00:00:24 [sysmgr-main] 737root 2 4 0 127 10:46:59 ? 00:00:00 [call_ebr] 738... 739``` 740 741 742## 查询网络信息 743 744可使用hidumper --net命令获取网络流量信息,网络接口统计信息、网口统计信息、IP信息、iptable信息和binder信息。该功能是通过netstat、ifconfig、iptables等系统命令获取网络信息。 745 746打印效果为: 747 748```shell 749$ hidumper --net 750 751-------------------------------[net traffic]------------------------------- 752 753Received Bytes:0 754Sent Bytes:51885 755 756-------------------------------[net]------------------------------- 757 758cmd is: netstat -nW -> 通过netstat -nW命令查询网络连接、路由表、接口统计等网络相关信息。 759... 760``` 761 762 763可使用hidumper --net [pid]命令获取指定进程的网络流量信息。 764 765 766打印效果为: 767 768 769```shell 770$ hidumper --net 1 771 772-------------------------------[net traffic]------------------------------- 773 774Received Bytes:0 775Sent Bytes:51885 776``` 777 778 779## 查询存储信息 780 781- 可使用hidumper --storage命令获取磁盘统计信息、磁盘使用量信息、文件句柄信息、IO流量统计信息和挂载信息。 782 783打印效果为: 784 785```shell 786$ hidumper --storage 787 788-------------------------------[storage]------------------------------- 789 790 791cmd is: storaged -u -p 792... 793``` 794 795 796- 可使用hidumper --storage [pid]命令获取指定进程的IO信息。 797 798 799打印效果为: 800 801 802```shell 803$ hidumper --storage 1 804 805-------------------------------[storage io]------------------------------- 806 807 808/proc/1/io 809 810rchar: 28848175 811wchar: 4364169 812syscr: 16886 813syscw: 15866 814read_bytes: 30617600 815write_bytes: 10907648 816cancelled_write_bytes: 734003 817``` 818 819 820IO信息的相关字段解释如下: 821 822 823- rchar:代表自进程启动以来所读取的总字符数,包括通过缓存或直接读取的字符。单位为Byte。 824 825- wchar:代表自进程启动以来所写入的总字符数,包括通过缓存或直接写入的字符。单位为Byte。 826 827- syscr:代表自进程启动以来所执行的 read 系统调用的次数。 828 829- syscw:代表自进程启动以来所执行的 write 系统调用的次数。 830 831- read_bytes:代表自进程启动以来所读取的字节数,包括从文件系统、网络等设备读取的字节数。单位为Byte。 832 833- write_bytes:代表自进程启动以来所写入的字节数,包括写入到文件系统、网络等设备的字节数。单位为Byte。 834 835- cancelled_write_bytes:代表自进程启动以来,因写入操作被取消而未写入的字节数。通常情况下,只有在向磁盘写入数据时发生错误或写入操作被中断时,该字段的值才会非零。单位为Byte。 836 837 838## 查询系统信息 839 840- 可使用hidumper -lc命令获取系统信息簇列表。 841 842打印效果为: 843 844```shell 845$ hidumper -lc 846System cluster list: 847base system 848``` 849 850- 可使用hidumper -c [系统通信息簇名称]命令获取指定信息簇信息。 851 852例如可使用hidumper -c base命令获取设备信息、内核版本、启动参数和启动时间。打印效果为: 853 854```shell 855-------------------------------[base]------------------------------- 856 857BuildId: ALN-AL00 5.0.1.XXX(XXX) -> 设备信息 858ReleaseType: Beta1 859OsVersion: phone/HUAWEI/HUAWEI/ALN/OpenHarmony-5.0.1.XXX(Beta1)/ALN-AL10/ALN-AL10/XX/5.0.1.XXX/default 860DeviceType: phone 861... 862 863/proc/version 864 865Hongmeng version: HongMeng Kernel X.XX.XX -> 内核版本 866 867/proc/cmdline -> 启动参数 868 869ohos.boot.post_data_blks=0x0 ohos.boot.ptn_last_blk=0x772AFFF ... 870 871cmd is: uptime -p 872 873up 0 weeks, 0 days, 5 hours, 27 minutes -> 启动时间 874``` 875 876例如可使用hidumper -c system命令获取环境变量、内核模块信息、当前已加载的内核模块、slab信息、zone信息、vmstat、vmalloc信息、cpu频率信息和内存信息。打印效果为: 877 878```shell 879$ hidumper -c system 880 881-------------------------------[system]------------------------------- 882 883 884cmd is: printenv -> 环境变量 885 886_=/system/bin/printenv 887LANG=en_US.UTF-8 888HOME=/root 889PULSE_STATE_PATH=/data/data/.pulse_dir/state 890OLDPWD=/ 891PWD=/ 892TMP=/data/local/mtp_tmp/ 893PULSE_RUNTIME_PATH=/data/data/.pulse_dir/runtime 894... 895 896/proc/modules -> 内核模块信息 897 898modem_driver 1490944 24 - Live 0x0000000000000000 899hmtpp_freq_dal_kirin 20480 0 [permanent], Live 0x0000000000000000 (O) 900kconsole 20480 0 [permanent], Live 0x0000000000000000 (O) 901hmtpp_dal 40960 2 hmtpp_freq_dal_kirin, Live 0x0000000000000000 (O) 902... 903 904cmd is: lsmod -> 当前已加载的内核模块 905 906Module Size Used by 907modem_driver 1490944 24 908hmtpp_freq_dal_kirin 20480 0 [permanent] 909kconsole 20480 0 [permanent] 910hmtpp_dal 40960 2 hmtpp_freq_dal_kirin 911... 912 913/proc/slabinfo -> slab 信息 914 915slabinfo - version: 2.0 916#name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <num_pool> <sharedavail> <reclaimable> 917slab-[16] 48459 54432 16 252 1 : tunables 0 0 0 : slabdata 215 216 4 0 0 918slab-[24] 78315 83328 24 168 1 : tunables 0 0 0 : slabdata 496 496 4 0 0 919slab-[32] 5834 9954 32 126 1 : tunables 0 0 0 : slabdata 79 79 4 0 0 920... 921 922/proc/zoneinfo -> zone 信息 923 924Node 0, zone DMA 925 per-node stats 926 nr_inactive_anon 419922 927 nr_active_anon 11737 928 nr_inactive_file 381289 929 nr_active_file 456643 930... 931 932/proc/vmstat -> vmstat 信息 933 934workingset_refault_anon 63071 935workingset_refault_file 0 936workingset_activate_anon 1742 937workingset_activate_file 0 938... 939 940/proc/vmallocinfo -> vmalloc 信息 941 9420x0000000000000000-0x0000000000000000 4096 of_iomap+0xe4/0xec pages=1 phys=0xfb21b000 ioremap 9430x0000000000000000-0x0000000000000000 4096 of_iomap+0xe4/0xec pages=1 phys=0xffb85000 ioremap 9440x0000000000000000-0x0000000000000000 4152 gen_pool_add_owner+0x48/0xc0 pages=2 vmalloc 9450x0000000000000000-0x0000000000000000 4096 of_iomap+0xe4/0xec pages=1 phys=0xee262000 ioremap 946... 947 948cmd is: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq -> CPU 频率信息 949 9501430000 951 952cmd is: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 953 9541530000 955 956cmd is: cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq 957 9581430000 959... 960 961-------------------------------[memory]------------------------------- -> 内存信息 962Total Memory Usage by PID: 963PID Total Pss(xxx in SwapPss) Total Vss Total Rss Total Uss GL Graph Dma PurgSum PurgPin Name 9641 4001(1672 in SwapPss) kB 59028 kB 5744 kB 1972 kB 0 kB 0 kB 0 kB 0 kB 0 kB init 9652 50451(0 in SwapPss) kB 18014398163279052 kB 52088 kB 49448 kB 0 kB 0 kB 0 kB 0 kB 0 kB sysmgr-main 96679 2741(0 in SwapPss) kB 2145468 kB 6052 kB 1292 kB 0 kB 0 kB 0 kB 0 kB 0 kB crypto.elf 96780 8796(0 in SwapPss) kB 2156116 kB 12584 kB 6940 kB 0 kB 0 kB 0 kB 0 kB 0 kB devmgr.elf 96885 96861(0 in SwapPss) kB 37180468 kB 100932 kB 94808 kB 0 kB 0 kB 0 kB 0 kB 0 kB devhost.elf 969501 2256(0 in SwapPss) kB 2142484 kB 3892 kB 1620 kB 0 kB 0 kB 0 kB 0 kB 0 kB hguard.elf 970586 1656(1412 in SwapPss) kB 32852 kB 744 kB 236 kB 0 kB 0 kB 0 kB 0 kB 0 kB ueventd 971... 972``` 973 974- 可使用hidumper -c命令获取全量信息簇信息。这包含上述base和system信息簇合集。 975 976 977## 获取系统故障日志 978 979可使用hidumper -e命令获取系统故障日志,打印对应故障日志的文件名及详细内容。 980 981```shell 982$ hidumper -e 983 984-------------------------------[faultlog]------------------------------- 985 986 987/data/log/faultlog/faultlogger/syswarning-com.ohos.sceneboard-20020022-20241106104006 -> 故障日志文件名 988 989Generated by HiviewDFX@OpenHarmony -> 故障日志详细内容 990... 991``` 992 993 994## 获取进程间通信信息 995 996可使用hidumper --ipc -a --start-stat/stop-stat/stat命令获取整机采集时间区间内IPC信息。 997 998打印效果为: 999 1000```shell 1001$ hidumper --ipc -a --start-stat 1002StartIpcStatistics pid:1473 success 1003StartIpcStatistics pid:775 success 1004StartIpcStatistics pid:1472 success 1005... 1006$ hidumper --ipc -a --stat 1007GlobalStatisticsInfo 1008CurrentPid:1473 1009TotalCount:3 1010TotalTimeCost:3783 1011--------------------------------ProcessStatisticsInfo------------------------------- 1012CallingPid:625 1013CallingPidTotalCount:3 1014... 1015$ hidumper --ipc -a --stop-stat 1016StopIpcStatistics pid:1473 success 1017StopIpcStatistics pid:775 success 1018StopIpcStatistics pid:1472 success 1019... 1020``` 1021 1022可使用hidumper --ipc [pid] --start-stat/stop-stat/stat命令获取指定进程采集时间区间内的IPC信息。 1023 1024打印效果为: 1025 1026```shell 1027$ hidumper --ipc 1473 --start-stat 1028StartIpcStatistics pid:1473 success 1029$ hidumper --ipc 1473 --stat 1030GlobalStatisticsInfo 1031CurrentPid:1473 1032TotalCount:2 1033TotalTimeCost:2214 1034--------------------------------ProcessStatisticsInfo------------------------------- 1035CallingPid:625 1036CallingPidTotalCount:2 1037CallingPidTotalTimeCost:2214 1038~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~InterfaceStatisticsInfo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1039DescriptorCode:OHOS.ILocalAbilityManager_6 1040DescriptorCodeCount:2 1041DescriptorCodeTimeCost: 1042Total:2214 | Max:1444 | Min:770 | Avg:1107 1043~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1044------------------------------------------------------------------------------------ 1045 1046$ hidumper --ipc 1473 --stop-stat 1047StopIpcStatistics pid:1473 success 1048``` 1049 1050 1051## 导出信息压缩存储 1052 1053hidumper提供有--zip命令支持将任意类型导出信息输出到 /data/log/hidumper 下的压缩文件,可以与其他命令组合使用,压缩格式为ZIP,文件命名为当前时间戳,如下打印效果所示。 1054 1055```shell 1056$ hidumper --zip 1057100%,[-],The result is:/data/log/hidumper/20250622-120444-166.zip 1058``` 1059 1060例如,对于 hidumper -e 命令获取系统故障日志,其输出的文本内容较多,可以考虑使用压缩存储,打印效果如下: 1061 1062```shell 1063$ hidumper -e 1064 1065-------------------------------[faultlog]------------------------------- 1066 1067 1068/data/log/faultlog/faultlogger/syswarning-com.ohos.sceneboard-20020022-20241106104006 -> 故障日志文件名 1069 1070Generated by HiviewDFX@OpenHarmony 1071... -> 故障日志详细内容,大量的文本内容,此处省略 1072$ hidumper -e --zip 1073100%,[-],The result is:/data/log/hidumper/20250623-092235-087.zip 1074``` 1075 1076## 常用ArkUI基础信息显示能力 1077ArkUI基于hidumper增强开发了获取组件树等信息的能力。 1078### 获取应用窗口信息 1079打印全量窗口信息,可以在全量信息中找出对应窗口的WinId,将该WinId作为参数传递给其他命令以获取相关信息。 1080 1081```shell 1082hdc shell hidumper -s WindowManagerService -a '-a' 1083``` 1084 **使用样例:** 1085```text 1086-------------------------------[ability]------------------------------- 1087 1088 1089----------------------------------WindowManagerService--------------------------------- 1090-------------------------------------ScreenGroup 1------------------------------------- 1091WindowName DisplayId Pid WinId Type Mode Flag ZOrd Orientation [ x y w h ] 1092ScreenLockWindow 0 1274 2 2110 1 0 4 0 [ 0 0 720 1280 ] 1093SystemUi_NavigationBar 0 1274 5 2112 102 1 3 0 [ 0 1208 720 72 ] 1094SystemUi_StatusBar 0 1274 4 2108 102 1 2 0 [ 0 0 720 72 ] 1095settings0 0 10733 11 1 1 1 1 0 [ 0 72 720 1136 ] 1096EntryView 0 1546 8 2001 1 0 0 8 [ 0 0 720 1280 ] 1097--------------------------------------------------------------------------------------- 1098SystemUi_VolumePanel 0 1274 3 2111 1 1 -1 0 [ 0 0 0 0 ] 1099SystemUi_DropdownPan 0 1274 6 2109 1 1 -1 0 [ 0 0 0 0 ] 1100SystemUi_BannerNotic 0 1274 7 2111 1 1 -1 0 [ 0 0 0 0 ] 1101RecentView 0 1546 9 2115 1 1 -1 0 [ 0 0 0 0 ] 1102imeWindow 0 1530 10 2105 1 1 -1 0 [ 0 0 0 0 ] 1103Focus window: 2 1104total window num: 10 1105``` 1106 1107常见windowName与内置应用窗口的对应关系: 1108|windowName|内置应用窗口| 1109|---|---| 1110| EntryView|桌面| 1111| RecentView|最近任务| 1112| SystemUi_NavigationBar|三键导航| 1113| SystemUi_StatusBar|状态栏| 1114| ScreenLockWindow|锁屏| 1115 1116### 获取期望应用组件树 1117如果需要查看应用中所有组件的信息,可以通过下列命令实现。 1118 1119```shell 1120hdc shell "hidumper -s WindowManagerService -a '-w %windowId% -element'" 1121``` 1122windowId是期望应用的窗口ID。 1123 1124**使用样例:** 1125 1126```text 1127hdc shell "hidumper -s WindowManagerService -a '-w 5 -element'" 1128 1129-------------------------------[ability]------------------------------- 1130----------------------------------WindowManagerService--------------------------------- 1131WindowName: SystemUi_NavigationBar 1132DisplayId: 0 1133WinId: 5 1134Pid: 1274 1135Type: 2112 1136Mode: 102 1137Flag: 1 1138Orientation: 0 1139IsStartingWindow: false 1140FirstFrameCallbackCalled: 0 1141IsVisible: false 1142WindowRect: [ 0, 1208, 720, 72 ] 1143TouchHotAreas: [ 0, 1208, 720, 72 ] 1144 |-> RootElement childSize:1 1145 | ID: 0 1146 | elmtId: -1 1147 | retakeID: 16 1148 | Active: Y 1149 |-> StackElement childSize:2 1150 | ID: 1 1151 | elmtId: -1 1152 | retakeID: 14 1153 | Active: Y 1154 |-> StageElement childSize:1 1155 | ID: 2 1156 | elmtId: -1 1157 | retakeID: 13 1158 | Active: Y 1159 |-> PageElement childSize:1 1160 | ID: 3 1161 | elmtId: -1 1162 | retakeID: 569 1163 | Active: Y 1164...... 1165``` 1166 1167### 获取应用中指定Node的组件信息 1168如果只需要查看组件中某一节点的组件信息,可以通过下列命令实现。 1169 1170```shell 1171hdc shell "hidumper -s WindowManagerService -a '-w %windowId% -element -lastpage %nodeID%'" 1172``` 1173windowId是应用的窗口ID,nodeID是指定Node的ID。可以通过获取期望应用组件树的操作获取nodeID。 1174 1175**使用样例:** 1176```text 1177hdc shell "hidumper -s WindowManagerService -a '-w 5 -element -lastpage 3'" 1178 1179-------------------------------[ability]------------------------------- 1180----------------------------------WindowManagerService--------------------------------- 1181WindowName: SystemUi_NavigationBar 1182DisplayId: 0 1183WinId: 5 1184Pid: 1274 1185Type: 2112 1186Mode: 102 1187Flag: 1 1188Orientation: 0 1189IsStartingWindow: false 1190FirstFrameCallbackCalled: 0 1191IsVisible: false 1192WindowRect: [ 0, 1208, 720, 72 ] 1193TouchHotAreas: [ 0, 1208, 720, 72 ] 1194 |-> PageElement childSize:1 1195 | ID: 3 1196 | elmtId: -1 1197 | retakeID: 569 1198 | Active: Y 1199...... 1200``` 1201 1202### 获取期望应用的Inspector树 1203上述示例中的element/render树主要包含多项内部实现,与应用代码中的组件无法一一对应。可以通过打印Inspector树来获取与应用中组件对应的树结构及组件基本信息。Inspector树与DevEco Testing及DevEco中的ArkUI Inspector完全匹配。 1204 1205使用此功能需要先打开ArkUI debug调试开关。 1206```shell 1207hdc shell param set persist.ace.testmode.enabled 1 1208``` 1209set: 设置命令;persist.ace.testmode.enabled:ArkUI debug调试开关名称;1:开关设置为true,打开调试功能。 1210 1211命令如下: 1212```shell 1213hdc shell "hidumper -s WindowManagerService -a '-w %windowId% -inspector'" 1214``` 1215**使用样例:** 1216 1217```text 1218hdc shell "hidumper -s WindowManagerService -a '-w 5 -inspector'" 1219 1220|-> rootstacktag childSize:1 1221| ID: 2100001 1222| compid: 1223| text: 1224| top: 72.000000 1225| left: 0.000000 1226| width: 0.000000 1227| height: 0.000000 1228| visible: 1 1229| clickable: 0 1230| checkable: 0 1231|-> Column childSize:1 1232| ID: 128 1233| compid: 1234| text: 1235| top: 72.000000 1236| left: 0.000000 1237| width: 720.000000 1238| height: 1136.000000 1239| visible: 1 1240| clickable: 0 1241| checkable: 0 1242|-> GridContainer childSize:1 1243| ID: 129 1244| compid: 1245| text: 1246| top: 72.000000 1247| left: 0.000000 1248| width: 720.000000 1249| height: 1136.000000 1250| visible: 1 1251| clickable: 0 1252| checkable: 0 1253|-> Column childSize:2 1254| ID: 130 1255| compid: 1256| text: 1257| top: 72.000000 1258| left: 0.000000 1259| width: 720.000000 1260| height: 180.000000 1261| visible: 1 1262| clickable: 0 1263| checkable: 0 1264 1265...... 1266``` 1267 1268### 获取期望应用路由栈信息 1269 1270该命令将输出应用页面路由栈的信息,依据栈的创建顺序及其父子关系排列。 1271 1272> **说明:** 1273> 1274> 仅支持通过[Navigation](../ui/arkts-navigation-navigation.md)组件实现页面路由的应用。 1275 1276命令: 1277 1278```shell 1279hidumper -s WindowManagerService -a '-w %windowId% -navigation -c' 1280``` 1281**使用样例:** 1282```text 1283hidumper -s WindowManagerService -a '-w 15 -navigation -c' 1284 1285-------------------------------[ability]------------------------------- 1286 1287 1288----------------------------------WindowManagerService-------------------------------- 1289WindowName: myapplication0 1290DisplayId: 0 1291WinId: 12 1292Pid: 5908 1293Type: 1 1294Mode: 1 1295Flag: 0 1296Orientation: 0 1297IsStartingWindow: false 1298FirstFrameCallbackCalled: 1 1299VisibilityState: 0 1300Focusable: true 1301DecoStatus: true 1302IsPrivacyMode: false 1303isSnapshotSkip: 0 1304WindowRect: [ 0, 0, 720, 1280 ] 1305TouchHotAreas: [ 0, 0, 720, 1280 ] 1306bundleName:com.example.myapplication 1307moduleName:entry 1308 LastRequestVsyncTime: 2351504075334 1309 transactionFlags: [ 5908, 0 ] 1310 last vsyncId: 527 1311Navigation number: 4 1312|-> Navigation ID: 7, Depth: 7, Mode: "SPLIT", NavDestinations: 1313 | [0]{ ID: 0, Name: "pageOne", Mode: "STANDARD", IsOnShow: "FALSE" } 1314 | [1]{ ID: 1, Name: "pageTwo", Mode: "STANDARD", IsOnShow: "TRUE" } 1315|-> Navigation ID: 19, Depth: 7, Mode: "AUTO (STACK)", NavDestinations: 1316 |-> Navigation ID: 28, Depth: 11, Mode: "STACK", NavDestinations: 1317 | [0]{ ID: 2, Name: "pageOne", Mode: "STANDARD", IsOnShow: "FALSE" } 1318 | [1]{ ID: 3, Name: "pageTwo", Mode: "DIALOG", IsOnShow: "FALSE" } 1319 |-> Navigation ID: 123, Depth: 11, Mode: "AUTO (SPLIT)", NavDestinations: 1320 | [0]{ ID: 4, Name: "pageFive", Mode: "STANDARD", IsOnShow: "FALSE" } 1321 | [1]{ ID: 5, Name: "pageSix", Mode: "STANDARD", IsOnShow: "FALSE" } 1322 | [2]{ ID: 6, Name: "pageThree", Mode: "STANDARD", IsOnShow: "TRUE" } 1323``` 1324> **说明:** 1325> 1326> 同一级别的节点,显示在最下方的节点为栈顶节点。 1327 1328## 常见问题 1329 1330 1331### hidumper 查询到的内存使用情况与hidebug接口获取到的内存使用情况之间的关系 1332 1333**现象描述** 1334 1335hidumper --mem 系列命令与[HiDebug](../reference/apis-performance-analysis-kit/js-apis-hidebug.md)接口获取到的内存信息存在差异。 1336 1337**可能原因&解决方法** 1338 1339hidumper --mem命令与HiDebug接口内存获取功能详细对比参考下表。 1340 1341**表1** 1342 1343| 命令或接口 | 使用场景 | 数据来源 | 是否导出图形内存 | 1344| -------- | -------- | -------- | -------- | 1345| hidumper --mem | 命令行获取**所有进程**的内存使用情况 | 系统节点:/proc/pid/smaps_rollup | 是 | 1346| hidumper --mem [pid] | 命令行获取**单个进程**的内存使用情况 | 系统节点:/proc/pid/smaps | 是 | 1347| hidumper --mem-smaps [pid] | 命令行获取**单个进程**的详细内存使用情况 | 系统节点:/proc/pid/smaps_rollup | 否 | 1348| [hidebug.getAppNativeMemInfo](../reference/apis-performance-analysis-kit/js-apis-hidebug.md#hidebuggetappnativememinfo12) | 获取**应用自身**的内存使用情况 | 系统节点:/proc/pid/smaps_rollup | 否 | 1349 1350若想通过hidebug获取图形内存,请参考[HiDebug能力概述](hidebug-guidelines.md)中的相关说明。 1351 1352 1353### hidumper获取进程虚拟机内存和泄露对象信息为空 1354 1355**现象描述** 1356 1357通过hidumper --mem-jsheap [pid] --leakobj命令获取指定进程的虚拟机堆内存和泄露对象信息,该命令没有正常生成文件。 1358 1359**可能原因&解决方法** 1360 1361hidumper --mem-jsheap [pid] --leakobj 命令依赖[JsLeakWatcher](../reference/apis-performance-analysis-kit/js-apis-jsleakwatcher.md)。应用需通过JsLeakWatcher接口开启泄漏检测功能。具体步骤参考:[查询虚拟机堆内存](#查询虚拟机堆内存)。 1362