[Mono-dev] sgen garbage collector/unmanaged resources/multi-thread issue
Rodrigo Kumpera
kumpera at gmail.com
Thu Feb 17 14:13:16 EST 2011
Hi Matteo,
I suppose you release memory on finalizers. Sgen has a longer cycle
to finalize objects than boehm. On why extra retention is happening on
linux is strange and could be a bug. Can you provide a test case that
shows this behavior?
On Fri, Feb 11, 2011 at 6:08 PM, matteo tesser <matteo.tesser at gmail.com>wrote:
> Hi Rodrigo,
> OK, taking or not taking into consideration memory pressure is a
> runtime's implementation choice: if you consider memory pressure, the
> runtime will be more reactive to memory usage, in the latter case no,
> but unreferenced objects should be freed sooner or later.
>
> I did an additional test: I counted the live object instances of the
> object type which references the unmanaged resources over time: while
> in windows and os x the live instances oscillate between 10K and 60K,
> in linux the live instances arrived to 20 milions. it seems that the
> GC does not realize that so many objects have been allocated. Are 20
> milions objects still a number that should not trigger the GC ?
>
> Probably the problem is not related to unmanaged memory but the
> particular structure of my problem highlights a defect.
>
> Matteo
>
>
>
> On Fri, Feb 11, 2011 at 3:34 PM, Rodrigo Kumpera <kumpera at gmail.com>
> wrote:
> > Mono doesn't take memory pressure into account. This is probably
> > what's happening.
> > On Fri, Feb 11, 2011 at 3:54 PM, matteo tesser <matteo.tesser at gmail.com>
> > wrote:
> >>
> >> Hello,
> >>
> >> I have a concurrent programming test which during 5-10 minutes
> >> creates and releases a lot of objects which use unmanaged memory.
> >> Every managed object, respectively allocates/deallocates the
> >> unmanaged memory using Marshal.AllocHGlobal and Marshall.FreeHGlobal
> >> methods and uses GC.AddMemoryPressure/GC.RemoveMemoryPressure to tell
> >> to the garbage collector the presence of the additional memory.
> >>
> >> I experienced some memory problems on linux, so I did several tests:
> >>
> >>
> >> 1) In linux machine with openSuse 11.3 64bit dual core with mono
> >> 2.8.2, the program launched with mono --gc=sgen eats 4GB of RAM in
> >> about two minutes (see attached screenshot).
> >> If I launch the test by specifying the use of boehm gc, the memory
> >> is still consumed but at smaller rate.
> >> I tried the test also with mono 2.10p3 and the behavior is the same
> >> (also using MONO_GC_PARAMS=stack-mark=precise)
> >>
> >>
> >> 2) In Windows/.NET the memory footprint of the program is constant on
> >> time: 80MB,
> >> 3) in a dual core mac os x ( with mono 2.10p2) the behavior is the
> >> same as windows.
> >>
> >> 4) In a Virtual Machine with linux openSuse 11.3 32bit and 1
> >> processor , mono 2.10p3 the test works fine: the memory footprint is
> >> constant at 50MB
> >>
> >> My conclusion is that the problem is restricted to the linux /
> >> multi-thread case.
> >> Are you aware of such issues on sgen?
> >>
> >> I tried to build-up a simple code reproducing the problem but I did
> >> not managed to do it with a simple test case, in case are you
> >> interested in a binary test case?
> >>
> >> Thanks,
> >> Matteo
> >>
> >> _______________________________________________
> >> Mono-devel-list mailing list
> >> Mono-devel-list at lists.ximian.com
> >> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >>
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20110217/47dcd03e/attachment.html
More information about the Mono-devel-list
mailing list