• Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • fitnesse-plugin
    • None

      We are seeing OOME's in Jenkins when parsing large Fitnesse results files (35mb). For example:

      Reading results as US-ASCII from /.../fitnesse-result.xml
      Parsing results...
      java.lang.OutOfMemoryError: Java heap space
      at java.util.Arrays.copyOf(Arrays.java:2882)
      at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
      at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
      at java.lang.StringBuffer.append(StringBuffer.java:306)
      at com.sun.org.apache.xalan.internal.xsltc.runtime.StringValueHandler.characters(StringValueHandler.java:49)
      at com.sun.org.apache.xml.internal.utils.FastStringBuffer.sendSAXcharacters(FastStringBuffer.java:998)
      at com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2.dispatchCharactersEvents(SAX2DTM2.java:3068)
      at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.characters(SAXImpl.java:1562)
      at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.characters(DOMAdapter.java:330)
      at GregorSamsa.template$dot$2()
      at GregorSamsa.applyTemplates()
      at GregorSamsa.template$dot$0()
      at GregorSamsa.applyTemplates()
      at GregorSamsa.applyTemplates()
      at GregorSamsa.transform()
      at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603)
      at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
      at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
      at hudson.plugins.fitnesse.NativePageCountsParser.transformRawResults(NativePageCountsParser.java:25)
      at hudson.plugins.fitnesse.NativePageCountsParser.parse(NativePageCountsParser.java:17)
      at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:131)
      at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:109)
      at hudson.plugins.fitnesse.FitnesseResultsRecorder.perform(FitnesseResultsRecorder.java:73)
      at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
      at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:705)
      at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:680)
      at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:658)
      at hudson.model.Build$RunnerImpl.post2(Build.java:161)
      at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:627)
      at hudson.model.Run.run(Run.java:1400)
      at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
      at hudson.model.ResourceController.execute(ResourceController.java:88)
      Build step 'Publish Fitnesse results report' changed build result to FAILURE
      Build step 'Publish Fitnesse results report' marked build as failure

      I'm fairly certain this OOME is due to memory usage by this parsing since we don't see OOME at any other time, and there is plenty of memory usually available according to our monitoring.

          [JENKINS-13936] Fitnesse results parsing uses too much heap

          Ryan Campbell created issue -
          Ryan Campbell made changes -
          Description Original: We are seeing OOME's in Jenkins when parsing large Fitnesse results files (35mb). For example:
          {quote}
          Reading results as US-ASCII from /.../fitnesse-result.xml
          Parsing results...
          java.lang.OutOfMemoryError: Java heap space
          at java.util.Arrays.copyOf(Arrays.java:2882)
          at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
          at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
          at java.lang.StringBuffer.append(StringBuffer.java:306)
          at com.sun.org.apache.xalan.internal.xsltc.runtime.StringValueHandler.characters(StringValueHandler.java:49)
          at com.sun.org.apache.xml.internal.utils.FastStringBuffer.sendSAXcharacters(FastStringBuffer.java:998)
          at com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2.dispatchCharactersEvents(SAX2DTM2.java:3068)
          at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.characters(SAXImpl.java:1562)
          at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.characters(DOMAdapter.java:330)
          at GregorSamsa.template$dot$2()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.template$dot$0()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.transform()
          at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603)
          at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
          at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
          at hudson.plugins.fitnesse.NativePageCountsParser.transformRawResults(NativePageCountsParser.java:25)
          at hudson.plugins.fitnesse.NativePageCountsParser.parse(NativePageCountsParser.java:17)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:131)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:109)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.perform(FitnesseResultsRecorder.java:73)
          at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
          at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:705)
          at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:680)
          at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:658)
          at hudson.model.Build$RunnerImpl.post2(Build.java:161)
          at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:627)
          at hudson.model.Run.run(Run.java:1400)
          at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
          at hudson.model.ResourceController.execute(ResourceController.java:88)
          Build step 'Publish Fitnesse results report' changed build result to FAILURE
          Build step 'Publish Fitnesse results report' marked build as failure
          {quote}

          Perhaps it would be more efficient to use a streaming parser like SAX?

          New: We are seeing OOME's in Jenkins when parsing large Fitnesse results files (35mb). For example:
          {quote}
          Reading results as US-ASCII from /.../fitnesse-result.xml
          Parsing results...
          java.lang.OutOfMemoryError: Java heap space
          at java.util.Arrays.copyOf(Arrays.java:2882)
          at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
          at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
          at java.lang.StringBuffer.append(StringBuffer.java:306)
          at com.sun.org.apache.xalan.internal.xsltc.runtime.StringValueHandler.characters(StringValueHandler.java:49)
          at com.sun.org.apache.xml.internal.utils.FastStringBuffer.sendSAXcharacters(FastStringBuffer.java:998)
          at com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2.dispatchCharactersEvents(SAX2DTM2.java:3068)
          at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.characters(SAXImpl.java:1562)
          at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.characters(DOMAdapter.java:330)
          at GregorSamsa.template$dot$2()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.template$dot$0()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.applyTemplates()
          at GregorSamsa.transform()
          at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603)
          at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
          at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
          at hudson.plugins.fitnesse.NativePageCountsParser.transformRawResults(NativePageCountsParser.java:25)
          at hudson.plugins.fitnesse.NativePageCountsParser.parse(NativePageCountsParser.java:17)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:131)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.getResults(FitnesseResultsRecorder.java:109)
          at hudson.plugins.fitnesse.FitnesseResultsRecorder.perform(FitnesseResultsRecorder.java:73)
          at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
          at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:705)
          at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:680)
          at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:658)
          at hudson.model.Build$RunnerImpl.post2(Build.java:161)
          at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:627)
          at hudson.model.Run.run(Run.java:1400)
          at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
          at hudson.model.ResourceController.execute(ResourceController.java:88)
          Build step 'Publish Fitnesse results report' changed build result to FAILURE
          Build step 'Publish Fitnesse results report' marked build as failure
          {quote}

          I'm fairly certain this OOME is due to memory usage by this parsing since we don't see OOME at any other time, and there is plenty of memory usually available according to our monitoring.

          Antoine Aumjaud made changes -
          Assignee New: Antoine Aumjaud [ antoine_aumjaud ]
          Antoine Aumjaud made changes -
          Resolution New: Fixed [ 1 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]
          Antoine Aumjaud made changes -
          Status Original: Resolved [ 5 ] New: Closed [ 6 ]
          R. Tyler Croy made changes -
          Workflow Original: JNJira [ 144404 ] New: JNJira + In-Review [ 205892 ]

            antoine_aumjaud Antoine Aumjaud
            recampbell Ryan Campbell
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: