博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SylixOS调试与性能分析技术--内存泄漏检测
阅读量:6277 次
发布时间:2019-06-22

本文共 1623 字,大约阅读时间需要 5 分钟。

hot3.png

1.内存泄漏检测原理

内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃。

SylixOS提供了内存检测方法,可以检测和跟踪内存泄漏,其原理如下:

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

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

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

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

 

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

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

l leakchkstart [max save node number] [pid](启动堆泄漏检查)

leakchkstart命令需要提供两个参数:

最大跟踪节点数(如果泄漏超过这个数就不记录)

PID信息(当PID大于0时,检测指定进程PID;PID等于0时,检测内核进程;当PID小于0时,检测所有进程)

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

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

 

3.内存泄漏检测示例

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

程序清单3.1 启动内存泄漏检测

 

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

 

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

程序清单3.2 打印内存泄漏信息

 

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

 

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

程序清单3.3 模拟内存泄漏

 

#include 
#include
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]# leakchkHEAP     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]# leakchkstopHEAP     THREAD     TIME     ADDR     SIZE     PURPOSE------- --------- -------- -------- ------- ----------------------1 app_demo       Sat Jan 01 09:47:56 2017 c2055008        116 mem alloctotal unfree segment: 1 size: 116

 

 

转载于:https://my.oschina.net/u/3248800/blog/1577926

你可能感兴趣的文章
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>