6 Replies Latest reply on Aug 13, 2011 11:40 AM by tsurdilovic

    Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded

    tomarenz

      Hi all, I would like to collect experience/comments on this issue, occurring at random but very often in my case.

      I have just two simple processes in Guvnor, 8 nodes each. One is BPMN2-ExclusiveSplit and the other is very similar.

      The defaultPackage has been successfully built.

      I can either run the Console to list processes, or I can run the Designer to view process definitions, edit them and rebuild the package.

      But as soon as I switch from an application to the other, soon I get a jboss error as reported in the subject.

      From that point on there's no way to proceed until I stop/restart jboss. I tried to logout from both application and to reenter: no way.

       

      I also tried to set -XX:-UseGCOverheadLimit, without any success. Things get blocked soon because of "java.lang.OutOfMemoryError: Java heap space".

       

      As an example of a failing sequence:

       

      - start the designer, select defaultPackage, list processes.

      - open both processes.

      - from the browser go to the rest url /gwt-console-server/rs/process/definitions, getting:

       

      2011-08-10 16:23:34,285 INFO  [STDOUT] (http-localhost%2F127.0.0.1-8080-3) INFO  10-08 16:23:34,285 (PackageDeploymentServlet.java:execute:144) PackageIsSource: false

      2011-08-10 16:23:36,937 INFO  [STDOUT] (http-localhost%2F127.0.0.1-8080-2) Loading process from Guvnor: boh

      2011-08-10 16:23:36,937 INFO  [STDOUT] (http-localhost%2F127.0.0.1-8080-2) Loading process from Guvnor: BPMN2-ExclusiveSplit

      2011-08-10 16:23:42,412 INFO  [STDOUT] (http-localhost%2F127.0.0.1-8080-2) Loading process from file system: Evaluation.bpmn

      2011-08-10 16:23:55,750 WARN  [org.jboss.detailed.classloader.ClassLoaderManager] (http-localhost%2F127.0.0.1-8080-2) Unexpected error during load of:org.drools.rule.builder.dialect.java.parser.JavaParser$DFA172

      java.lang.OutOfMemoryError: GC overhead limit exceeded

      at java.util.Arrays.copyOf(Arrays.java:2786)
      at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
      at org.jboss.classloader.plugins.ClassLoaderUtils.readBytes(ClassLoaderUtils.java:212)
      at org.jboss.classloader.plugins.ClassLoaderUtils.loadByteCode(ClassLoaderUtils.java:148)
      at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:543)
      at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:532)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:530)
      at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:507)
      at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
      at org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)
      at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
      at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)
      at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
      at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
      at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
      at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:798)
      at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:441)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
      at org.drools.rule.builder.dialect.java.parser.JavaParser.<init>(JavaParser.java:11723)
      at org.drools.rule.builder.dialect.java.parser.JavaParser.<init>(JavaParser.java:219)
      at org.drools.rule.builder.dialect.java.JavaExprAnalyzer.analyzeBlock(JavaExprAnalyzer.java:90)
      at org.drools.rule.builder.dialect.java.JavaDialect.analyzeBlock(JavaDialect.java:258)
      at org.jbpm.process.builder.dialect.java.JavaActionBuilder.build(JavaActionBuilder.java:56)
      at org.jbpm.process.builder.ExtendedNodeBuilder.buildAction(ExtendedNodeBuilder.java:40)
      at org.jbpm.process.builder.ExtendedNodeBuilder.build(ExtendedNodeBuilder.java:29)
      at org.jbpm.process.builder.EventBasedNodeBuilder.build(EventBasedNodeBuilder.java:19)
      at org.jbpm.process.builder.WorkItemNodeBuilder.build(WorkItemNodeBuilder.java:18)
      at org.jbpm.compiler.ProcessBuilderImpl.processNodes(ProcessBuilderImpl.java:215)
      at org.jbpm.compiler.ProcessBuilderImpl.buildNodes(ProcessBuilderImpl.java:201)
      at org.jbpm.compiler.ProcessBuilderImpl.buildProcess(ProcessBuilderImpl.java:165)
      at org.jbpm.compiler.ProcessBuilderImpl.addProcessFromXml(ProcessBuilderImpl.java:254)

       

      ...

       

       

      Comments are welcome.

        • 1. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
          tsurdilovic

          What Java, OS are you running on? Is this something that happens on different machines or just yours? Any of these types of input would be helpful.

          Thanks.

          • 2. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
            tomarenz

            Hi Tihomir,

            I run Win7 64 bits, 4 GB, jdk 1.6.0_21

            Jbpm installed with stardard components (installer), except the designer which is "unofficial" 1.0.0.0.54 released yesterday.

            I don't know about other machines, I started playing with jBpm since a couple of weeks only.

            • 3. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
              tomarenz

              In the mean time I requested a memory dump on OutOfMemory conditions, then I loaded the resulting file into Eclipse Memory Analyzer Tool.

              One evident result is a suspected leak as:

               

              598 instances of "org.jboss.virtual.plugins.context.zip.ZipEntryContext", loaded by "org.jboss.bootstrap.NoAnnotationURLClassLoader @ 0x1774ed68" occupy 152.700.536 (37,01%) bytes.

               

              Keywords
              org.jboss.bootstrap.NoAnnotationURLClassLoader @ 0x1774ed68
              org.jboss.virtual.plugins.context.zip.ZipEntryContext

               

              ZipEntryContext - whatever it is - appears in error logs, such as:

               

              java.lang.OutOfMemoryError: GC overhead limit exceeded

                  at java.util.zip.InflaterInputStream.<init>(InflaterInputStream.java:71)

                  at java.util.zip.ZipFile$1.<init>(ZipFile.java:212)

                  at java.util.zip.ZipFile.getInputStream(ZipFile.java:212)

                  at java.util.zip.ZipFile.getInputStream(ZipFile.java:180)

                  at org.jboss.virtual.plugins.context.zip.ZipFileWrapper.openStream(ZipFileWrapper.java:214)

                  at org.jboss.virtual.plugins.context.zip.ZipEntryContext.openStream(ZipEntryContext.java:1082)

                  at org.jboss.virtual.plugins.context.zip.ZipEntryHandler.openStream(ZipEntryHandler.java:153)

                  at org.jboss.virtual.VirtualFile.openStream(VirtualFile.java:230)

                  at org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.getResourceAsStream(VFSClassLoaderPolicy.java:483)

                  at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:534)

                  at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:532)

                  at java.security.AccessController.doPrivileged(Native Method)

                  at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:530)

                  at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:507)

                  at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)

                  at org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)

                  at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)

                  at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)

                  at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)

                  at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)

                  at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)

                  at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:798)

                  at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:441)

                  at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

                  at org.eclipse.jdt.internal.compiler.Compiler.initializeParser(Compiler.java:681)

                  at org.eclipse.jdt.internal.compiler.Compiler.<init>(Compiler.java:282)

                  at org.eclipse.jdt.internal.compiler.Compiler.<init>(Compiler.java:158)

                  at org.drools.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:362)

                  at org.drools.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)

                  at org.drools.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:368)

                  at org.drools.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:53)

                  at org.drools.compiler.PackageRegistry.compileAll(PackageRegistry.java:70)

               

              or:

               

              Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

                  at java.util.Arrays.copyOf(Arrays.java:2882)

                  at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)

                  at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)

                  at java.lang.StringBuilder.append(StringBuilder.java:119)

                  at org.jboss.virtual.plugins.context.zip.ZipEntryContext.getChild(ZipEntryContext.java:823)

                  at org.jboss.virtual.plugins.context.zip.ZipEntryHandler.createChildHandler(ZipEntryHandler.java:191)

                  at org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:684)

                  at org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:165)

                  at org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:107)

                  at org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:481)

                  at org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.getResources(VFSClassLoaderPolicy.java:524)

                  at org.jboss.classloader.spi.base.BaseClassLoader$4.run(BaseClassLoader.java:691)

                  at java.security.AccessController.doPrivileged(Native Method)

                  at org.jboss.classloader.spi.base.BaseClassLoader.getResourcesLocally(BaseClassLoader.java:687)

                  at org.jboss.classloader.spi.base.BaseClassLoader.getResourcesLocally(BaseClassLoader.java:668)

                  at org.jboss.classloader.spi.base.BaseClassLoaderDomain.getResources(BaseClassLoaderDomain.java:505)

                  at org.jboss.classloader.spi.base.BaseClassLoaderDomain.getResources(BaseClassLoaderDomain.java:1154)

                  at org.jboss.classloader.spi.base.BaseClassLoader.loadResources(BaseClassLoader.java:495)

                  at org.jboss.classloader.spi.base.BaseClassLoader.findResources(BaseClassLoader.java:481)

                  at java.lang.ClassLoader.getResources(ClassLoader.java:1041)

                  at java.lang.ClassLoader.getResources(ClassLoader.java:1037)

                  at org.drools.util.CompositeClassLoader.getResources(CompositeClassLoader.java:148)

                  at org.drools.util.ChainedProperties.getResources(ChainedProperties.java:144)

                  at org.drools.util.ChainedProperties.<init>(ChainedProperties.java:90)

                  at org.drools.RuleBaseConfiguration.init(RuleBaseConfiguration.java:392)

                  at org.drools.RuleBaseConfiguration.<init>(RuleBaseConfiguration.java:244)

                  at org.drools.common.AbstractRuleBase.<init>(AbstractRuleBase.java:146)

                  at org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:143)

                  at org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:120)

                  at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:86)

                  at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:74)

                  at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:37)

              • 4. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
                tsurdilovic

                I would start by searching JBoss Jiras for this class and see what comes up. Vaguely remember seeing a Jira on similar with Seam (Guvnor uses Seam) and AS5.

                Hope this helps.

                • 5. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
                  tomarenz

                  This issue seems related to http://209.132.182.49/message/594221?tstart=0.

                  The problem was known and solved, but for some reason the patch didn't get through in jBoss 5.1.

                  The suggested workaround seems working well in my case, though.

                  • 6. Re: Console + Designer = jboss OutOfMemoryError: GC overhead limit exceeded
                    tsurdilovic

                    Great find, would be nice if you can mark the question as answered/resolved so other people can find it useful as well.