2 doesn't require any increased memory, just clearing the context in the teardown.
Vincent Massol wrote: > Hi Caleb, > > On Mar 3, 2010, at 7:36 AM, Caleb James DeLisle wrote: > >> As I see it there are three known workarounds for the problem at the >> moment. >> 1. Isolate the tests - <forkMode>pertest</forkMode> >> 2. Clear the context (patch). >> 3. Increase the memory for tests - <argLine>-Xmx512m</argLine> > > * What about 2? Does 2 require increased memory too? > * BTW we all agree about reducing build times. It is *critical* to have the > fastest possible build. Great, I guess I was just feeling cynical when i thought "make it slow and someone will fix it". > * I'm really surprised that the time difference is so important. I remember I > had done some tests when I put the forktest and the differences were very > small which is why we did it (maybe we added a lot of tests since then, > causing the problem). I always remember 1/2 hour, maybe it's my computer. > * BTW2: We could easily have the fork only in xwiki-core and have all other > build modules use non forked tests. I did a find-grep and xwiki-core is the only place I find 'pertest' > * I don't understand why 1 would take more memory than 3. Not sure either, one guess is starting and stopping the vm. > * Personally, as I've already said, I'm for 2 if it solves the memory issue > and allows to run tests in non fork mode. As a second option I'm for 3. "solves" might be too strong a word :) but it runs with the default memory settings. I have to build again, I'll try the clear context patch and report the time building that. Thanks for the interest, Caleb > > Thanks > -Vincent > >> Here is a test with the memory increased: >> [INFO] Total time: 13 minutes 41 seconds >> [INFO] Finished at: Wed Mar 03 00:20:01 GMT-05:00 2010 >> [INFO] Final Memory: 96M/218M >> >> And with the tests forked (current setup) >> [INFO] Total time: 34 minutes 58 seconds >> [INFO] Finished at: Wed Mar 03 01:02:29 GMT-05:00 2010 >> [INFO] Final Memory: 167M/496M >> >> both built from platform/trunks with mvn clean install -Pdev >> >> I think the options listed above are (IMO) comparable in terms of >> 'hackishness' with the only difference that one takes almost three >> times as long to compile. >> >> It seems that the viewpoints on this are: >> 1. Cob it together for now and hope the leaks get fixed or retired >> with the old core. >> 2. Make it take a long time to compile in the hope that someone will >> get disgusted enough to route out some of the leaks. >> >> I favor 1 because the old core is deprecated so those leaks' days >> are numbered anyway, and also when platform takes a half hour to >> build, contributors will find it harder to make and test patches. >> >> Ok, I will stop beating this dead horse now. >> Caleb >> >> >> Vincent Massol wrote: >>> On Mar 1, 2010, at 11:42 AM, Caleb James DeLisle wrote: >>> >>>> Vincent Massol wrote: >>>>> On Mar 1, 2010, at 11:18 AM, Caleb James DeLisle wrote: >>>>> >>>>>> Vincent Massol wrote: >>>>>>> On Mar 1, 2010, at 10:48 AM, Caleb James DeLisle wrote: >>>>>>> >>>>>>>> By clearing the XWikiContext in the tearDown of the unit test, I can >>>>>>>> stop the memory leak and stop running the tests in isolation. I am >>>>>>>> proposing we apply this change because the XWikiContext is created >>>>>>>> per test and the worst problem which can be created is tests >>>>>>>> erroneously passing which I don't think is very likely from a change >>>>>>>> like this. >>>>>>> +1 for the main reason that this improves build times. The second >>>>>>> reason is that it makes memory leaks more visible which gives us a >>>>>>> better chance to find them (although this won't replace performance >>>>>>> tests running over a few days for ex). >>>>>>> >>>>>>> However please add a comment just above the getContext().clear() to >>>>>>> explain why this is needed. BTW why is it needed? :) >>>>>> I will do that. The reason it's needed is because (it seems) the >>>>>> context is referenced by a static variable which isn't cleared and >>>>>> rather than pick through the tests looking for where the reference >>>>>> was (and hoping no test ever does it again) I opted to clear the >>>>>> context and let the tests use the context as they wish. This is my >>>>>> understanding of the situation. >>>>> Then the question is why do we reference the context statically? Can't we >>>>> remove that? >>>> Static referencing is more a theory than a fact, the problem as I >>>> see it is the context is used everywhere and referenced in a lot of >>>> places so anything which is able to escape the tearDown process and >>>> happens to hold a reference to the context will cause references to >>>> persist pointing to everything. I think the choice is to either >>>> clear the context or pour through each test individually looking for >>>> any reference which might escape tearDown. I remember running >>>> various tests individually and in pairs with very little memory and >>>> finding a lot of them seem to have leaks. >>> Well the GC doesn't run all the time so you need to ensure you're forcing >>> it to run after a test to know if the test has a leak. >>> >>> And yes, I couldn't get to the bottom of it in the past (didn't spend >>> enough time) which is why I took the easy route of forking tests to isolate >>> them. >>> >>> Thanks >>> -Vincent >>> >>>>>>>> Jira issue: http://jira.xwiki.org/jira/browse/XWIKI-4953 >>>>>>>> Patch: >>>>>>>> http://jira.xwiki.org/jira/secure/attachment/16788/XWIKI-4496-patchTestMemoryLeak.patch >>>>>>>> >>>>>>>> Patch content: >>>>>>>> >>>>>>>> Index: core/xwiki-core/pom.xml >>>>>>>> =================================================================== >>>>>>>> --- core/xwiki-core/pom.xml (revision 27357) >>>>>>>> +++ core/xwiki-core/pom.xml (working copy) >>>>>>>> @@ -823,10 +823,6 @@ >>>>>>>> <plugin> >>>>>>>> <groupId>org.apache.maven.plugins</groupId> >>>>>>>> <artifactId>maven-surefire-plugin</artifactId> >>>>>>>> - <configuration> >>>>>>>> - <!-- Prevent Out Of Memory errors resulting from tests >>>>>>>> that do no free up the memory correctly --> >>>>>>>> - <forkMode>pertest</forkMode> >>>>>>>> - </configuration> >>>>>>>> </plugin> >>>>>>>> <!-- Publish a Core Test JAR --> >>>>>>>> <plugin> >>>>>>>> Index: >>>>>>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>>>>>> =================================================================== >>>>>>>> --- >>>>>>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>>>>>> (revision 27357) >>>>>>>> +++ >>>>>>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>>>>>> (working copy) >>>>>>>> @@ -80,6 +80,7 @@ >>>>>>>> protected void tearDown() throws Exception >>>>>>>> { >>>>>>>> Utils.setComponentManager(null); >>>>>>>> + getContext().clear(); >>>>>>>> super.tearDown(); >>>>>>>> } > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

