Re: Memory leak (kind of) in ERXObjectStoreCoordinatorSynchronizer

Troy Evans <[email protected]>
Newsgroups gmane.comp.web.webobjects.wonder-disc
Message-ID <CADZ67G0uFt=ACjd0LNW8J1=gz5bF6-9QVsWdq7U3O0Lopr5O8Q@mail.gmail.com>
Thanks for the reply, Ramsey.

I've found that I can avoid the leak by just disabling the synchronizer and
leaving the ERXOSC pool:

ERXObjectStoreCoordinatorSynchronizer.synchronizer().setDefaultSettings(new
SynchronizerSettings(false, false, false, false));

Do you see any downsides to doing it that way, or have you found that it is
also necessary to avoid the OSC pool for other reasons?

I guess not many people are using the OSC synchronizer & pool(?) The leak
seems pretty glaring... I'm surprised more people haven't run into problems.

-- 
Troy


On Thu, Dec 27, 2012 at 2:12 PM, Ramsey Gurley <[email protected]>wrote:

>
> On Dec 27, 2012, at 12:50 PM, Troy Evans wrote:
>
> Hello,
>
> I posted this question on stackoverflow.com a few months ago:
> http://stackoverflow.com/questions/10302982/.  I've since found a little
> more information about the problem and updated the original question. The
> quick version is this:
>
> I've found that ERXObjectStoreCoordinatorSynchronizer seems to synchronize
> some things that it shouldn't and fails to clean up some things that fall
> out of scope. In the example I have in the stackoverflow question, an
> object is created, saved, and then it's EC and OSC are disposed and
> everything falls out of scope, which results in the object being removed
> from the EODatabase._snapshots array (as it should). After the snapshot is
> removed from the EODatabase instance, the synchronizer runs and adds the
> (now obsolete) EO to the other OSCs, which results in the object being *re
> *-added to the EODatabase._snapshots array, where it remains until all
> relevant OSCs are disposed.
>
> In the app I'm working on, since some OSCs stick around for the life of
> the app, the above scenario results in a memory leak with the old/obsolete
> objects hanging around in memory until the app is restarted.
>
> I suppose I could periodically locate an dispose all of my OSCs to get
> around the issue, but shouldn't it be the synchronizer's job to clean up
> obsolete objects?
>
> Is anyone else seeing this behavior?
>
>
> Yep
>
> Is this a bug in ERXObjectStoreCoordinatorSynchronizer,
>
>
> Yep
>
> or am I just doing things incorrectly?
>
>
> Nope
>
>
> Thanks,
> Troy
>
>
> I noticed this putting together the persistent session storage framework.
> jMeter tests ran fine until I turned on ERXOSC pooling. Then memory usage
> exploded as if I had no persistent sessions at all. The problem is exactly
> what you are describing. The synchronizer adds the snapshot to all the
> other OSCs but the only thing that cleans up the snapshots is the EC and it
> only cleans up its own OSC.  It's easy to demonstrate with persistent
> sessions because the snapshots are relatively big (~73Kb in my test case).
> I didn't see a way to fix it easily.
>
> My solution is to avoid the ERXOSC pool. If its a small/slow leak, you
> could schedule restarts on your instances.  You might also run multiple
> instances instead of using an OSC pool.
>
> Ramsey
>
>

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812

_______________________________________________
Wonder-disc mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wonder-disc
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.