您的位置:首页 > 其它

SylixOS调试与性能分析技术--内存泄漏检测

2017-11-23 15:13 363 查看

1.
内存泄漏检测原理

内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃。
SylixOS提供了内存检测方法,可以检测和跟踪内存泄漏,其原理如下:


当开启内存泄漏检测功能时,创建一个链表;


当执行申请内存操作时,将信息记录至链表中的一个节点;


当执行释放内存操作时,将对应的链表节点信息删除;


当执行打印内存泄漏跟踪消息时,打印链表中所有的节点数据。
 

2.
内存泄漏检测调试技术

SylixOS通过在系统中输入shell命令进行内存泄漏检测,其命令如下:


leakchkstart [max save node number] [pid](启动堆泄漏检查)
leakchkstart
命令需要提供两个参数:
最大跟踪节点数(如果泄漏超过这个数就不记录)
PID信息(当PID大于0时,检测指定进程PID;PID等于0时,检测内核进程;当PID小于0时,检测所有进程)


leakchkstop
(停止堆泄漏检查并打印泄漏消息)


leakchk
(打印内存泄漏跟踪消息)
 

3.
内存泄漏检测示例

启动内存泄漏检查,如程序清单
3.1所示。
程序清单3.1 
启动内存泄漏检测

[root@sylixos:/apps/app_demo]# leakchkstart 1024 -1
leakcheck start checking...


打印当前内存泄漏信息,如程序清单
3.2所示。
程序清单3.2 
打印内存泄漏信息

[root@sylixos:/apps/app_demo] leakchk
HEAP THREAD TIME ADDR SIZE PURPOSE
------- --------- -------- -------- ------- ----------------------


模拟内存泄漏,如程序清单
3.3所示。
程序清单3.3 
模拟内存泄漏

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
int *p;

p = (int*)malloc(sizeof(int) * 128);

return (0);
}


再次打印当前内存泄漏信息,如程序清单
3.4所示。
程序清单3.4 
再次打印泄漏信息

[root@sylixos:/apps/app_demo]# leakchk
HEAP THREAD TIME ADDR SIZE PURPOSE
------- --------- -------- -------- ------- ----------------------
1 app_demo Sat Jan 01 09:47:56 2017 c2055008 116 mem alloc


停止内存泄漏检查并打印泄漏信息,如程序清单
3.5所示。
程序清单3.5 
停止内存泄漏检测

[root@sylixos:/apps/app_demo]# leakchkstop
HEAP THREAD TIME ADDR SIZE PURPOSE
------- --------- -------- -------- ------- ----------------------
1 app_demo Sat Jan 01 09:47:56 2017 c2055008 116 mem alloc

total unfree segment: 1 size: 116
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SylixOS 内存泄露