内存使用
命令功能
进行内存分配、释放性能数据采集,检查应用中的内存分配未释放的情况。
命令格式
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 ...] |
参数说明
参数 |
参数选项 |
说明 |
---|---|---|
-h/--help |
- |
可选参数,获取帮助信息。 |
-l/--log-level |
0/1/2/3 |
可选参数,设置日志级别,默认为2。
说明:
新增功能采用更合理设计,默认等级调整为2(WARNING)。
|
--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 |
返回信息如下:
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文件的第九行,将此处问题修改后可再使用工具诊断,以确认修改是否完全。
参数项 |
说明 |
---|---|
stack_name |
显示应用的堆栈名称。 |
stack_id |
显示堆栈ID。 |
alloc_size |
显示已申请未释放的内存大小。 |
alloc_count |
显示申请次数。 |
alloc_distribution |
显示内存块大小和个数。 |
alloc_pid |
显示进程ID。 |
stack_info |
显示详细的堆栈信息,依次为调用栈地址、调用栈名称、module和代码行号。 |
通过--package参数打包生成TAR包,可将TAR包导入Web界面查看图形化信息;导入详情请参见任务管理中的任务导入部分内容。