libumem
文章平均质量分 83
arrow_pig
这个作者很懒,什么都没留下…
展开
-
使用libumem定位memory leak和memory corruption(1)
Posted on八月 12, 2008byarrowpig1979<br /><br /><br />今天新来的Manager让我最近给组里的同事分享一下最近我处理memory相关issue的经验。我想也好,干脆总结一下。先来介绍一个很基础但是很有用的工具libumem.so,libumem中的u指的是user space,是相对于kernal space来说的。读过linux的同学都知道linux kernal object内存管理的一个重要的概念就是slab。其实这个概念是solaris首原创 2011-01-07 16:47:00 · 3072 阅读 · 0 评论 -
使用libumem定位memory leak和memory corruption(2)
<br />Posted on八月 13, 2008byarrowpig1979<br /> <br /> <br />今天来介绍libumem中使用的数据结构。上次讲到每个cache会管理一类对象,在这里是内存对象。每个cache维护着相同大小的N块buffer,每个buffer的结构如下: <br /><br /> <br /> <br />每一块buffer由4部分组成,Metadata section有8个字节,User data section就是用户可以使用的内存区域,返回给用户的BUF原创 2011-01-07 16:49:00 · 1592 阅读 · 0 评论 -
使用libumem定位memory leak和memory corruption(4)
Posted on八月 16, 2008byarrowpig1979<br />Memory Corruption<br />今天介绍memory corruption的处理,往往在程序中会发生SEGMENMT FAULT, ARRAY BOUND WRITER,DOUBLE-FREE等等,处理以来很麻烦,这里先给一个教科书级别的例子,实际中的情况要复杂很多,特别是在多线程的时候更麻烦。 <br />int *p = (int*)malloc(16); <br />for(int i=0; i<=原创 2011-01-07 16:52:00 · 1802 阅读 · 3 评论 -
使用libumem定位memory leak和memory corruption(3)
<br />今天开始实战。以Test程序为例来看看如何发现memory leak。首先是以libumem方式运行程序: <br />//Test.cpp<br />int *p = (int*)malloc(50); <br />p = (int*)malloc(100);<br />free(p); <br />-bash-3.00$ UMEM_DEBUG=default UMEM_LOGGING=transaction LD_PRELOAD=libumem.so.1 ./Test &原创 2011-01-07 16:50:00 · 2105 阅读 · 0 评论 -
使用libumem定位memory leak和memory corruption(3)-续
<br />我明白了,我明白了为什么在(3)中发现了两处内存泄漏!先回顾一下(3)中的第二处泄漏的call stack, 注意这个stack是经过C++ 的符号mangle的,可读性很差,我首先用gc++filt处理一下: <br />> 080a7300$<bufctl_audit ! gc++filt<br /> ADDR BUFADDR TIMESTAMP THREAD<br />原创 2011-01-07 16:51:00 · 1559 阅读 · 0 评论