鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

内存使用

命令功能

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

命令格式

1
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...]替换为应用路径加应用参数。
  • 不支持在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

-

可选参数,设置采集内存使用最大的top N个堆栈信息,默认为5,取值范围为5至15个(报告输出内容按堆栈大小排序)。

-z/--min-size

-

可选参数,设置采集到的每次内存使用的最小值,单位为字节,需大于等于1。

-Z/--max-size

-

可选参数,设置采集到的每次内存使用的最大值,单位为字节,需大于等于2。

-p/--pid

-

可选参数,指定采集的进程PID,默认为-1,表示采集内核态内存使用情况。

使用示例

可参见学习视频查看实际操作视频。

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

参数“-d 5”表示采集时长为5秒,参数“--package”表示将报告数据生成TAR包,“/opt/testdemo/mem_leak”为待分析应用的路径,示例使用的应用源码可在Github获取。

返回信息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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.

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

表2 报告参数说明

参数项

说明

stack_name

显示应用的堆栈名称。

stack_id

显示堆栈ID。

alloc_size

显示已申请未释放的内存大小。

alloc_count

显示申请次数。

alloc_distribution

显示内存块大小和个数。

alloc_pid

显示进程ID。

stack_info

显示详细的堆栈信息,依次为调用栈地址、调用栈名称、module和代码行号。

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