valgrind检测libevent内存泄露
valgrind检测libevent内存泄露
github地址
在使用封装好的http
库时,遇到了如下的内存泄露,一开始在definitely
处还存在泄露,这里就不贴图了,已经被淹没了。
根据提示定位出错代码位置,如下图:
这里提示evhttp_new
这里出现了泄露,我们先到http
库中解决已经存在的内存泄露,在析构函数里已经对这一块做了处理如下图:
这里有一个注意点,因为这里是单独起的线程运行的event_base_dispatch(event_base_);
,所以我们在event_base_loopbreak
后,需要等线程执行完毕后,在释放event_base_free(event_base_);
,这里还需要执行libevent_global_shutdown();
,否则still reachable:
部分还会存在泄露。还有一处地方存在泄露,在昨天用同样的方法定位到的,这里记录一下:
左边是之前出现泄露的情况,右边是修改后的代码。改完这些后,我们在http
库下运行测试程序,发现:
已经没有泄露了,剩下来的72704 bytes in 1 blocks
是和gcc
版本有关,在gcc 7.40
上是没有这个问题的。库的内存泄露解决了,下面我们到生产环境中去,发现还是存在泄露,明明我们在析构中已经做了处理,我在库代码中加入了日志信息,发现并没有进入析构函数,也就没有执行回收的代码,出现了内存泄露。定位到原因在这里:
我们需要把这里的类声明去掉,具体原因见我另一篇文章。最终将所有存在内存泄露都给解决了。
附录:memcheck 常见错误
- 使用未初始化的内存
==1001== Use of uninitialised value of size 8
- 在内存被释放后进行读 / 写
==1001== Invalid read of size 1
- 从已分配内存块的尾部进行读 / 写
==1001== Invalid read of size 1
- 内存泄露
==1001== LEAK SUMMARY
- 不匹配地使用
malloc/new/new []
和free/delete/delete []
==1001== Mismatched free() / delete / delete []
- 两次释放内存
==1001== Invalid free() / delete / delete[]
valgrind检测libevent内存泄露相关推荐
- arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析
C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...
- linux下利用valgrind工具进行内存泄露检测和性能分析
http://blog.csdn.net/yanghao23/article/details/7514587 valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简 ...
- Linux valgrind java_linux下利用valgrind工具进行内存泄露检测和性能分析
valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 Valgrind包含下列工具: 1.memcheck:检查程序中的内存问题,如泄漏.越界.非法指针等. 2 ...
- 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露
valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...
- valgrind 报告 ecpg内存泄露 (三)
valgrind为何 报 ecpg内存泄露错误?根据我的同事的研究成果: 究其原因,全局变量 sqlca 由malloc形成,但是释放时是隐含的: ecpg_sqlca_key_destructor函 ...
- 使用MLeaksFinder检测项目内存泄露总结
前几天看到开源工具MLeaksFinder,决定用在公司的项目中试一下,效果很不错,用法也很简单,直接把项目文件夹拖到项目中就可以了,依靠这个项目,我发现公司项目中有不少内存泄露的地方,在此总结一下: ...
- android oom 检测工具,Android中UI检测、内存泄露、OOM、等优化处理
对Android整个优化分析,非常棒,下面是自己的积累笔记.可直接看原文. 界面检测工具: Fps: GPU检测, 使用Lint进行资源及冗余UI布局等优化 (很强大,布局的冗余) Memory检测G ...
- 检测java内存泄露_MAT 检测 Java内存泄露检测
一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...
- android内存泄漏检测,Android内存泄露检测之LeakCanary的使用
开始使用 目前为止最新的版本是2.3版本,相比于2.0之前的版本,2.0之后的版本在使用上简洁了很多,只需要在dependencies中加入LeakCanary的依赖即可.而且debugImpleme ...
最新文章
- 清华连续三年稳坐亚洲第一!西交利物浦成今年黑马 | 2021泰晤士亚洲大学排名...
- MySQL下载与MySQL安装图解(MySQL5.7与MySQL8.0)
- SharePoint Workflow 基础
- 【Python SQLAlchemy】数据库连接池SQLAlchemy中多线程安全的问题
- 网站决策分析软件WebBI
- pom.xml配置文件配置jar(不用记,快速配置)
- VC+ADO+Access2000数据库文件密码的设置和修改
- congatec AG acquires Real-Time Systems GmbH
- 转 android anr 分析示例,Android ANR 分析与解决
- 信息系统开发平台OpenExpressApp - 从compositewpf到MEF
- aswing学习笔记2-不规则外框-请教思路
- 让 Edit 只接受数字《转》
- echarts官网打不开。
- 如何解决网站不安全信息?免费SSL证书
- 【Java】根据生日计算年龄
- 电脑共享文件打不开要如何解决
- 仿网易云音乐网站(加入个人社区)
- 什么是互联网产品的运营?,互联网营销
- 【专利撰写】专利类型
- google earth engine随缘学习(十一)影像分割
热门文章
- php整站防注入程序,一个不错的php通用防注入程序
- oracle idl_ub1$,system表空间急剧增大原因分析
- 关于c语言的英文论文,C语言论文外文翻译.doc
- 计算机专业会议评级,2018计算机专业工程教育认证研讨会
- 数组填充php,php数组入门教程之数组填充
- java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟
- python找最长的字符串_为Python找到最长重复字符串的有效方法(从Pearls编程)
- 接入上文,StarWind V2V Image Converter:虚拟机镜像转换工具,如何使用转化之后的 VMware VMDK 文件
- C++primer 第 4 章 表达式 4.1基础 4 . 2 算术运算符 4 .3 逻辑和关系运算符 4 . 4 赋值运算符 4 .5 递增和递减运算符 4.6成员访问运算符
- 区块链相关问题 理解