Heap memory is not re-claiming.

V.Ravikumar ravikumar.vallabhu at gmail.com
Tue Oct 18 00:34:35 EDT 2011


On Sat, Oct 15, 2011 at 9:31 AM, Mulyadi Santosa
<mulyadi.santosa at gmail.com>wrote:

> Hi.... :)
>
> On Fri, Oct 14, 2011 at 16:15, pankaj singh <psingh.ait at gmail.com> wrote:
> > Nice doc ...:)
> >
> > On Fri, Oct 14, 2011 at 10:28 AM, rohan puri <rohan.puri15 at gmail.com>
> wrote:
> >> Reference to an article by Mulayadi Santosa :-
> >>
> >>
> http://linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html
> >>
> >> AWESOME ARTICLE SIR :)
>
>
> Thank you, thank you very much for your appreciation :) I just hope,
> besides getting adequate money, you all got something meaningful from
> that article. And I believe, as long as there are people who have same
> concerned, that article will be refined over and over and overall will
> be better through the time :)
>
> --
> regards,
>
> Mulyadi Santosa
> Freelance Linux trainer and consultant
>
> blog: the-hydra.blogspot.com
> training: mulyaditraining.blogspot.com
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>

 Hi,

It's really a fabulous article.
Many many thanks to  Mulyadi for such a great article and thank for Rohan
for sharing the link.

I read the article and correlate contents  with my current issue.
Here are my observations. Do please correct me if I'm wrong at any point.

The leak  which I was observed in my program is due to big memory buffers of
size 5MB allocation from heap.I've 6 such character buffers.

So as per below lines from the article memory should be allocated with mmap
and it immediately releases memory to kernel  upon free/delete call from
user land process.

The allocator uses two functions to get a chunk of memory from the kernel:

   - brk() sets the end of the process's data segment.
   - mmap() creates a new VMA and passes it to the allocator.

The decision on whether to use brk() or mmap() requires one simple check. If
the request is equal or larger than M_MMAP_THRESHOLD, the allocator uses
mmap(). If it is smaller, the allocator calls brk(). By default,
M_MMAP_THRESHOLD is 128KB

But It seems I'm landed with a case which uses brk() for allocation and so
it just marks as free when I my program frees the memory and hence 30 MB
memory (I've 6 , 5MB buffers from heap)was kept on allocator's control
leading to a 30MB leak of user land process.
Please note that I'm freeing memory for 6 buffers (I'm sure about that).

Regards,
Ravi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20111018/68c978e2/attachment.html 


More information about the Kernelnewbies mailing list