---
title: 内存使用诊断
description: "进行内存分配、释放性能数据采集，检查应用中的内存分配未释放的情况。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/profiler/diagnosis/KunpengDevKitCli_0076.html
sourcePath: /source/zh/kunpengdevps/profiler/diagnosis/KunpengDevKitCli_0076.html
indexId: ec3fec75c792650b5d965373b4f52b5f726fae8509c7093a2e7203f62ff1abb169
---
# 内存使用诊断

#### 命令功能

进行内存分配、释放性能数据采集，检查应用中的内存分配未释放的情况。


#### 命令格式

```
devkit doctor memalloc [-h] [-l {0,1,2,3}] [--package] [-o <file>] [-d <sec>] [-i <sec>] [-t n] [-z <byte>] [-Z <byte>] [-p PID] [workload workload...]
```


- 工具可采集指定应用，命令中[workload workload...]替换为应用路径加应用参数。
- 不支持在SUSE Linux操作系统使用。
- 该功能基于eBPF能力实现，采集时需使用root用户，判断环境是否符合请参见  eBPF环境检查
。


#### 参数说明


**表1 参数说明**

| 参数 | 参数选项 | 说明 |
| --- | --- | --- |
| \-h/\-\-help | \- | 可选参数，获取帮助信息。 |
| \-l/\-\-log\-level | 0/1/2/3 | 可选参数，设置日志级别，默认为2。 说明： 新增功能采用更合理设计，默认等级调整为2（WARNING）。 0：日志级别为DEBUG。 1：日志级别为INFO。 2：日志级别为WARNING。 3：日志级别为ERROR。 |
| \-\-package | \- | 可选参数，设置是否将数据导入数据库，并在指定输出路径中生成压缩包。 |
| \-o/\-\-output | \- | 设置报告数据压缩包名称和输出路径，仅输入名称时默认生成在当前所在目录；需和\-\-package配合使用。 |
| \-d/\-\-duration | \- | 可选参数，设置采集时长，单位为秒，默认为采集应用运行结束，可使用Ctrl+C停止采集并进入分析。 |
| \-i/\-\-interval | \- | 可选参数，设置采集间隔（以秒为单位）。默认为1秒，取值范围1至60秒，且不可超过采集时长。 |
| \-t/\-\-top | \- | 可选参数，设置报告中显示前N个最大的堆栈信息，默认值为5个（即最多显示5个，不足5个时按实际采集个数显示），取值范围为5至15个（报告输出内容按堆栈大小排序）。 |
| \-z/\-\-min\-size | \- | 可选参数，设置采集到的每次内存使用的最小值，单位为字节，需大于等于1。 |
| \-Z/\-\-max\-size | \- | 可选参数，设置采集到的每次内存使用的最大值，单位为字节，需大于等于2。 |
| \-p/\-\-pid | \- | 可选参数，指定采集的进程PID，默认为\-1，表示采集内核态内存使用情况。 |


#### 使用示例

```
devkit doctor memalloc -d 5 --package /opt/testdemo/mem_leak
```

参数“-d 5”表示采集时长为5秒，参数“--package”表示将报告数据生成TAR包，“/opt/testdemo/mem_leak”为待分析应用的路径，示例使用的应用源码可在GitHub(https://github.com/kunpengcompute/devkitdemo/blob/main/Hyper_tuner/testdemo/mem-leak/mem_leak.c)获取。


返回信息如下：

```
Executing "/opt/testdemo/mem_leak" and tracing the resulting process.
Attaching to App, fork pid = 3725254, Ctrl+C to quit.
Memory Allocate Summary Report-1                        Time:2025/08/18 15:57:21
================================================================================
No stacks with outstanding allocations.
Memory Allocate Summary Report-2                        Time:2025/08/18 15:57:22
================================================================================
Top 1 stacks with outstanding allocations:
Top 1 Stack
————————————————————————————————————————————————————————————————————
stack_name                mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
stack_id                  13704
alloc_size                8192B
alloc_count               1
alloc_distribution        8KB-16KB 1
alloc_pid                 3725254
stack_info:
0x00000000004007e0        mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
0x0000000000400848        child+0x3c [/opt/testdemo/mem_leak] [mem_leak.c:21]
0x0000ffffaf45ce4c        [unknown] [/usr/lib64/libc.so.6] [unknown]
0x0000ffffaf4c3b0c        [unknown] [/usr/lib64/libc.so.6] [unknown]
Memory Allocate Summary Report-3                        Time:2025/08/18 15:57:23
================================================================================
Top 1 stacks with outstanding allocations:
Top 1 Stack
————————————————————————————————————————————————————————————————————
stack_name                mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
stack_id                  13704
alloc_size                16384B
alloc_count               2
alloc_distribution        8KB-16KB 2
alloc_pid                 3725254
stack_info:
0x00000000004007e0        mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
0x0000000000400848        child+0x3c [/opt/testdemo/mem_leak] [mem_leak.c:21]
0x0000ffffaf45ce4c        [unknown] [/usr/lib64/libc.so.6] [unknown]
0x0000ffffaf4c3b0c        [unknown] [/usr/lib64/libc.so.6] [unknown]
Memory Allocate Summary Report-4                        Time:2025/08/18 15:57:24
================================================================================
Top 1 stacks with outstanding allocations:
Top 1 Stack
————————————————————————————————————————————————————————————————————
stack_name                mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
stack_id                  13704
alloc_size                24576B
alloc_count               3
alloc_distribution        8KB-16KB 3
alloc_pid                 3725254
stack_info:
0x00000000004007e0        mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
0x0000000000400848        child+0x3c [/opt/testdemo/mem_leak] [mem_leak.c:21]
0x0000ffffaf45ce4c        [unknown] [/usr/lib64/libc.so.6] [unknown]
0x0000ffffaf4c3b0c        [unknown] [/usr/lib64/libc.so.6] [unknown]
Memory Allocate Summary Report-5                        Time:2025/08/18 15:57:25
================================================================================
Top 1 stacks with outstanding allocations:
Top 1 Stack
————————————————————————————————————————————————————————————————————
stack_name                mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
stack_id                  13704
alloc_size                32768B
alloc_count               4
alloc_distribution        8KB-16KB 4
alloc_pid                 3725254
stack_info:
0x00000000004007e0        mem_leak+0x1c [/opt/testdemo/mem_leak] [mem_leak.c:9]
0x0000000000400848        child+0x3c [/opt/testdemo/mem_leak] [mem_leak.c:21]
0x0000ffffaf45ce4c        [unknown] [/usr/lib64/libc.so.6] [unknown]
0x0000ffffaf4c3b0c        [unknown] [/usr/lib64/libc.so.6] [unknown]
The report /root/memalloc-20250818-155719.tar is generated successfully.
To view summary report. you can run: devkit report -i /root/memalloc-20250818-155719.tar
To view detail report. you can import the report to the WebUI or IDE to view details.
```


**表2 报告参数说明**

| 参数项 | 说明 |
| --- | --- |
| Top 1 stacks with outstanding allocations | Top N个堆栈信息。 示例回显中仅显示一个，因demo中只有一个堆栈。 |
| stack\_name | 显示应用的堆栈名称。 |
| stack\_id | 显示堆栈ID。 |
| alloc\_size | 显示已申请未释放的内存大小。 |
| alloc\_count | 显示申请次数。 |
| alloc\_distribution | 显示内存块大小和个数。 |
| alloc\_pid | 显示进程ID。 |
| stack\_info | 显示详细的堆栈信息，依次为调用栈地址、调用栈名称、module和代码行号。 |


回显信息中alloc_size的值随时间不断增长，可确定存在内存泄漏；在stack_name和stack_info部分提示“[mem_leak.c:9]”，表示内存泄漏点在mem_leak.c文件的第九行，将此处问题修改后可再使用工具诊断，以确认修改是否完全。

通过--package参数打包生成TAR包，可将TAR包导入Web界面查看图形化信息；导入详情请参见任务管理中的任务导入部分内容。
