On Thu, 2015-12-31 at 08:14 -0800, KenD wrote:
>
> On Thu, 31 Dec 2015 03:36:46 -0500
> "Phil (list)" <pbpublist@gmail.com> wrote:
>
> > I was curious if the VM has any facilities to assist in tracking
> > down
> > memory leaks? (not in the VM itself, but rather in the image it is
> > running) The scenario that comes to mind are object reference
> > loops
> > though there are likely others to consider as well. Any pointers
> > are
> > appreciated.
>
> Hi Phil,
>
> It depends on what, specifically, you are doing.
>
> There are tools in Caregory Tools-ReferenceFinder which I suspect
> would be of help.
>
I've been using reference finder and weight explorer to do some
preliminary investigation but given the current size of this image
(250M) it's slow going with each search taking upwards of a minute and
running into OOM problems. But if that's all there is, I'll keep going
down this path.
> In the limit, any deep memory bug is probably investigated in a VM
> simulator. This type of bug in a released image is rare. Typical
> images do not load the object-memory/vm simulator, but you can build
> a VMMaker image which has the code.
>
At this stage I'm expecting to find that it's my code doing the leaking
into the image, and not a base image or VM bug. My original thought
was that I had some orphaned reference loops floating around but ran
across a post that indicated that unrooted reference loops should not
be a problem for the VM to gc. I've done all of the obvious things I
could think of to minimize rooted references including closing
workspaces, browsers, inspectors, terminated Smalltalk processes etc.
Any ideas as to what other possible ways these objects could be
rooted?
> Note that this is for people with deep knowledge. You have to
> understand how objects are represented in memory, Cog (JIT) vs non-
> Cog, Spur vs non-Spur, StackInterpreter vs optimized, ...
>
Hoping not to need to dive this deeply just yet. (esp. for what
appears to be a user-space problem)
> Two article blogs discuss the deeper currents within the VM:
> http://www.mirandabanda.org/cogblog/
> https://clementbera.wordpress.com/author/clementbera/
>
> Note that because of the Squeak/Pharo/Cuis community, you can safely
> ignore the VM and play happily in Smalltalk, so don't feel you have
> to dive into this level of operations unless you have the calling for
> it (i.e. you are walking alone and something reaches out from the
> earth, grabs your ankle, and down you go. Hey, it happens!).
>
I didn't start down this path out of curiosity ;-) You can only ignore
it when it doesn't result in your image growing by an order of
magnitude larger than it should be and beginning to experience
performance issues as a result. I could start from a new base image
but as this is code I want to productionize at some point, I'd expect
that whatever is going on right now will be a problem down the road so
I'd rather deal with it sooner rather than later.
> Cheers,
> -KenD
Phil