Announcement Announcement Module
No announcement yet.
Roo takes at least 30 minutes to process classes after initial 'poll now' command Page Title Module
Move Remove Collapse
Conversation Detail Module
  • Filter
  • Time
  • Show
Clear All
new posts

  • Roo takes at least 30 minutes to process classes after initial 'poll now' command


    I am using Spring Roo on a production project with mixed results (I am planning to write up a case study once the project is delivered). The project is a web application using a mix of jQuery and Spring Roo scaffolded elements.

    Anyway my number on hassle is the Spring Roo console hanging, sometimes indefinitely, when I first start it up (I basically try to never close it for this reason).

    As an example I will have been working for several days no problem but then need to shut everything down for some reason. When I start the console up again I execute a 'poll now' command and it takes anywhere from 5 to 50 minutes to come back. The only feedback I get is 'please wait - still loading' in the top right hand corner. I execute the 'poll now' statement as without this I get the hanging behaviour without any warning. Eventually it usually comes back with a few files updated etc.

    If Spring Roo ever comes back then things seem to work fine again until I have to restart the console.

    Because I am the only one working on the project this is just about bareable but it is very very annoying and unproductive. Is there any place to see what Spring Roo is doing (the log file is of no use)? Is there anything to check in terms of setup?

    Unfortunately I have found the 1.1.5 release to be much worse in this regard, but this may just be my project getting larger.

    Chris Mein

  • #2
    Further observations

    I added the following to the run.bat file (I run under Windows) : -Xmx512m -Xmx1024m

    Watching Spring Roo start and then try and perform the 'poll now' statement shows the memory footprint steadily climb through 25,000K (around where it starts for me) to 66,000K or so. I therefore assume that previously a huge amount of time was spent trying to keep within a smaller heap space. Anyway Spring Roo returns now in 'only' a couple of minutes which, although not great, is usable.

    If I could suggest that some additional feedback on what is going on in the Spring Roo console (rather than just 'still loading') I might have addressed this sooner.

    Also my application is certainly not large by any stretch of the imagination - so maybe a more realistic statement of resources etc. that is needed to run the console might be useful. I noticed people saying Eclipse crashes occur etc. - could this simply be the fact the Spring Roo console quickly consumes a pretty decent amount of resources?


    • #3
      How many entities and controllers do you have? Start the shell and then type metadata status, post the results here. The MVC add-ons are very slow when a there is a significant number of controllers.


      • #4
        Hi Alan

        Sorry, been away from the project for a little while. To answer your questions the project has around 25 entities and around 20 Roo managed controllers. Under 1.1.5 the MVC logic is pretty slow (hence my request for a 'touch' command some time back) - typically I update an entity and wait around for maybe 5 minutes until the controller is updated. Not ideal but at least I can use the system with the larger Java heap size.

        The metadata status command shows:

        285310 ns; 000074 call(s): org.springframework.roo.project.AutomaticProjectUp gradeService
        665077 ns; 000073 call(s): org.springframework.roo.addon.web.mvc.jsp.JspMetad ataListener
        000022 ms; 000020 call(s): org.springframework.roo.addon.solr.SolrWebSearchMe tadata
        000023 ms; 000020 call(s): org.springframework.roo.addon.entity.IdentifierMet adata
        000023 ms; 000020 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.mvc.WebScaffoldMetadata
        000024 ms; 000021 call(s): org.springframework.roo.addon.solr.SolrMetadata
        000024 ms; 000021 call(s): org.springframework.roo.addon.json.JsonMetadata
        000024 ms; 000021 call(s): orMetadata
        000024 ms; 000021 call(s): org.springframework.roo.addon.tostring.ToStringMet adata
        000024 ms; 000021 call(s): org.springframework.roo.addon.serializable.Seriali zableMetadata
        000026 ms; 000021 call(s): org.springframework.roo.addon.web.mvc.controller.c onverter.ConversionServiceMetadata
        000028 ms; 000020 call(s): org.springframework.roo.addon.configurable.Configu rableMetadata
        000039 ms; 000074 call(s): org.springframework.roo.addon.gwt.GwtOperationsImp l
        000062 ms; 000021 call(s): org.springframework.roo.addon.gwt.GwtMetadataProvi derImpl
        000063 ms; 000021 call(s): org.springframework.roo.addon.gwt.GwtMetadata
        000082 ms; 000021 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.json.WebJsonMetadata
        000084 ms; 000020 call(s): org.springframework.roo.addon.entity.EntityMetadat a
        000087 ms; 000020 call(s): org.springframework.roo.addon.finder.FinderMetadat a
        000095 ms; 000021 call(s): org.springframework.roo.addon.plural.PluralMetadat a
        000107 ms; 000026 call(s): org.springframework.roo.addon.plural.PluralMetadat aProviderImpl
        000187 ms; 000021 call(s): org.springframework.roo.addon.javabean.JavaBeanMet adata
        000200 ms; 000020 call(s): org.springframework.roo.addon.dod.DataOnDemandMeta data
        000423 ms; 000074 call(s): org.springframework.roo.classpath.TypeLocationServ iceImpl
        000578 ms; 000539 call(s): org.springframework.roo.addon.solr.SolrMetadataPro vider
        000580 ms; 000539 call(s): org.springframework.roo.addon.web.mvc.controller.c onverter.ConversionServiceMetadataProvider
        000580 ms; 000539 call(s): org.springframework.roo.addon.serializable.Seriali zableMetadataProviderImpl
        000581 ms; 000610 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.mvc.WebScaffoldMetadataProviderImpl
        000581 ms; 000538 call(s): org.springframework.roo.addon.solr.SolrWebSearchMe tadataProvider
        000584 ms; 000538 call(s): org.springframework.roo.addon.entity.IdentifierMet adataProviderImpl
        000631 ms; 000539 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.json.WebJsonMetadataProviderImpl
        000652 ms; 000540 call(s): org.springframework.roo.addon.json.JsonMetadataPro vider
        000666 ms; 000539 call(s): orMetadataProvider
        000699 ms; 000020 call(s): org.springframework.roo.addon.test.IntegrationTest Metadata
        000714 ms; 000666 call(s): org.springframework.roo.addon.tostring.ToStringMet adataProvider
        000751 ms; 000116 call(s): org.springframework.roo.addon.javabean.JavaBeanMet adataProvider
        000775 ms; 000039 call(s): org.springframework.roo.addon.configurable.Configu rableMetadataProviderImpl
        000837 ms; 000539 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.finder.WebFinderMetadataProviderImpl
        001101 ms; 000021 call(s): org.springframework.roo.addon.dbre.DbreMetadata
        001249 ms; 000607 call(s): org.springframework.roo.addon.test.IntegrationTest MetadataProviderImpl
        001385 ms; 000604 call(s): org.springframework.roo.addon.dod.DataOnDemandMeta dataProviderImpl
        001396 ms; 000060 call(s): org.springframework.roo.classpath.javaparser.JavaP arserMetadataProvider
        001729 ms; 000540 call(s): org.springframework.roo.addon.dbre.DbreMetadataPro viderImpl
        002352 ms; 000002 call(s): org.springframework.roo.project.MavenProjectMetada taProvider
        009050 ms; 000021 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.finder.WebFinderMetadata
        009533 ms; 000520 call(s): org.springframework.roo.addon.entity.EntityMetadat aProviderImpl
        010534 ms; 000626 call(s): org.springframework.roo.addon.finder.FinderMetadat aProviderImpl
        012842 ms; 000073 call(s): org.springframework.roo.project.ProjectPathMonitor ingInitializer
        [[email protected] validGets = 23618, recursiveGets = 512, cachePuts = 148, cacheHits = 14258, cacheMisses = 9360, cacheEvictions = 7866, cacheCurrentSize = 80, cacheMaximumSize = 100000]



        • #5
          Can you please try with 1.2.0.M1? We have made significant performance improvements in this area


          • #6
            To be honest I'm a little nervous about moving to 1.2.0.M1 as the project is nearing its delivery date and I can't afford Spring Roo related issues just now.

            I am planning to write up my experience of getting something done with Spring Roo though and am happy to do that check then - sometime in October I hope.



            • #7
              I'm curious to know what the performance gain is. Can you just copy the project and start the 1.2.0.M1 Roo shell in it and issue the metadata status command?


              • #8
                I will get 1.2.0.M1 downloaded tommorrow and run that for you. Do you need any other information?


                • #9
                  Here is the metadata status results for 1.2.0.M1

                  046080 ns; 000032 call(s): org.springframework.roo.project.AutomaticProjectUp gradeService
                  231165 ns; 000003 call(s): org.springframework.roo.addon.gwt.locator.GwtLocat orMetadata
                  269564 ns; 000004 call(s): org.springframework.roo.addon.gwt.request.GwtReque stMetadata
                  274941 ns; 000004 call(s): org.springframework.roo.addon.gwt.proxy.GwtProxyMe tadata
                  322942 ns; 000004 call(s): org.springframework.roo.addon.layers.service.Servi ceInterfaceMetadata
                  327548 ns; 000003 call(s): org.springframework.roo.addon.entity.IdentifierMet adata
                  351741 ns; 000003 call(s): org.springframework.roo.addon.dod.DataOnDemandMeta data
                  358651 ns; 000004 call(s): a.RepositoryJpaMetadata
                  365947 ns; 000003 call(s): org.springframework.roo.addon.test.IntegrationTest Metadata
                  370172 ns; 000033 call(s): org.springframework.roo.addon.web.mvc.jsp.JspMetad ataListener
                  415483 ns; 000004 call(s): org.springframework.roo.addon.tostring.ToStringMet adata
                  434683 ns; 000004 call(s): org.springframework.roo.addon.dbre.DbreMetadata
                  437370 ns; 000004 call(s): org.springframework.roo.addon.serializable.Seriali zableMetadata
                  439673 ns; 000004 call(s): org.springframework.roo.addon.solr.SolrMetadata
                  459258 ns; 000004 call(s): org.springframework.roo.addon.json.JsonMetadata
                  478842 ns; 000004 call(s): org.springframework.roo.addon.web.mvc.controller.f inder.WebFinderMetadata
                  499576 ns; 000004 call(s): org.springframework.roo.addon.solr.SolrWebSearchMe tadata
                  572921 ns; 000004 call(s): orMetadata
                  587129 ns; 000004 call(s): org.springframework.roo.addon.layers.service.Servi ceClassMetadata
                  617849 ns; 000004 call(s): org.springframework.roo.addon.web.mvc.controller.j son.WebJsonMetadata
                  642809 ns; 000004 call(s): org.springframework.roo.addon.configurable.Configu rableMetadata
                  732279 ns; 000004 call(s): ngo.RepositoryMongoMetadata
                  000001 ms; 000047 call(s): a.RepositoryJpaMetadataProvider
                  000001 ms; 000047 call(s): ngo.RepositoryMongoMetadataProvider
                  000002 ms; 000004 call(s): org.springframework.roo.addon.web.mvc.controller.c onverter.ConversionServiceMetadata
                  000002 ms; 000047 call(s): org.springframework.roo.addon.solr.SolrMetadataPro vider
                  000002 ms; 000047 call(s): org.springframework.roo.addon.serializable.Seriali zableMetadataProviderImpl
                  000002 ms; 000047 call(s): org.springframework.roo.addon.web.mvc.controller.f inder.WebFinderMetadataProviderImpl
                  000002 ms; 000047 call(s): org.springframework.roo.addon.solr.SolrWebSearchMe tadataProvider
                  000002 ms; 000046 call(s): org.springframework.roo.addon.entity.IdentifierMet adataProviderImpl
                  000002 ms; 000047 call(s): org.springframework.roo.addon.json.JsonMetadataPro vider
                  000002 ms; 000078 call(s): org.springframework.roo.addon.test.IntegrationTest MetadataProviderImpl
                  000002 ms; 000080 call(s): org.springframework.roo.addon.dod.DataOnDemandMeta dataProviderImpl
                  000002 ms; 000048 call(s): org.springframework.roo.addon.dbre.DbreMetadataPro viderImpl
                  000003 ms; 000079 call(s): org.springframework.roo.addon.web.mvc.controller.j son.WebJsonMetadataProviderImpl
                  000003 ms; 000047 call(s): orMetadataProvider
                  000004 ms; 000047 call(s): org.springframework.roo.addon.web.mvc.controller.c onverter.ConversionServiceMetadataProvider
                  000004 ms; 000079 call(s): org.springframework.roo.addon.layers.service.Servi ceClassMetadataProvider
                  000005 ms; 000004 call(s): org.springframework.roo.addon.finder.FinderMetadat a
                  000006 ms; 000113 call(s): org.springframework.roo.addon.layers.service.Servi ceInterfaceMetadataProvider
                  000008 ms; 000004 call(s): org.springframework.roo.addon.javabean.JavaBeanMet adata
                  000008 ms; 000110 call(s): org.springframework.roo.addon.tostring.ToStringMet adataProvider
                  000011 ms; 000004 call(s): org.springframework.roo.addon.entity.JpaEntityMeta data
                  000020 ms; 000041 call(s): org.springframework.roo.addon.javabean.JavaBeanMet adataProvider
                  000033 ms; 000004 call(s): org.springframework.roo.addon.entity.EntityMetadat a
                  000037 ms; 000009 call(s): org.springframework.roo.addon.configurable.Configu rableMetadataProviderImpl
                  000064 ms; 000009 call(s): org.springframework.roo.addon.entity.JpaEntityMeta dataProviderImpl
                  000115 ms; 000004 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.WebScaffoldMetadata
                  000118 ms; 000079 call(s): org.springframework.roo.addon.web.mvc.controller.s caffold.WebScaffoldMetadataProviderImpl
                  000128 ms; 000007 call(s): org.springframework.roo.addon.plural.PluralMetadat aProviderImpl
                  000156 ms; 000004 call(s): ngo.MongoEntityMetadata
                  000156 ms; 000047 call(s): ngo.MongoEntityMetadataProvider
                  000162 ms; 000004 call(s): org.springframework.roo.addon.plural.PluralMetadat a
                  000169 ms; 000016 call(s): org.springframework.roo.addon.entity.EntityMetadat aProviderImpl
                  000286 ms; 000057 call(s): org.springframework.roo.addon.finder.FinderMetadat aProviderImpl
                  000619 ms; 000004 call(s): org.springframework.roo.addon.gwt.scaffold.GwtScaf foldMetadataProviderImpl
                  001471 ms; 000002 call(s): org.springframework.roo.project.MavenProjectMetada taProvider
                  002516 ms; 000167 call(s): org.springframework.roo.classpath.DefaultPhysicalT ypeMetadataProvider
                  003647 ms; 000004 call(s): org.springframework.roo.addon.gwt.scaffold.GwtScaf foldMetadata
                  005972 ms; 000034 call(s): org.springframework.roo.project.ProjectPathMonitor ingInitializer
                  [[email protected] validGets = 3951, recursiveGets = 59, cachePuts = 242, cacheHits = 2691, cacheMisses = 1260, cacheEvictions = 1184, cacheCurrentSize = 115, cacheMaximumSize = 100000]


                  • #10
                    Thanks. It does look like the performance is better with 1.2.0.M1 based on validGets alone - over an 80% reduction