user1726460
user1726460

Reputation: 107

Jenkins Out of Memory error while running multiple jmeter script

I have a Jmeter/Jenkins/maven/perforce framework for API testing purpose.Where each JMX contain around 200 test cases .each test cases are written inside a thread group with one user only. Each test case has some precondition for data fetching from multiple dbs then heating request then use multiple assertions using bean shell one also.Also we have used a lot of customize jar so that we can access server and read the logs or to edit the properties file over there.

If we ran the script from jmeter it ran smoothly but if we run the script from Jenkins say 20 jmx at a time sequentially,then after some time it may be 1 2 or 17 hr it fails showing out of memory error.

My current Jenkins server config is like this:

 free -h
              total        used        free      shared  buff/cache   available
Mem:   

               31G        3.1G        12.9G         16M         15G         24G

i have already tweaked with heap space like 6/8 ,12/12.

Log at the time of failure:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
    at java.lang.reflect.Method.invoke(Method.java:508)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
    at java.lang.Thread.run(Thread.java:811)
Caused by: java.lang.OutOfMemoryError: Java heap space
    at org.apache.xerces.xni.XMLString.toString(Unknown Source)
    at org.apache.xerces.parsers.AbstractDOMParser.characters(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleCharacter(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(Unknown Source)
    at <unknown class>.<unknown method>(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at utils.APIReportProcessing.fetchAPIReportDetail(APIReportProcessing.java:84)
    at jmeterRun.RunProcess.prepareFinalResults(RunProcess.java:179)
    at jmeterRun.RunProcess.executeJMeterAndWriteResults(RunProcess.java:158)
    at jmeterRun.ControllerJMeter.main(ControllerJMeter.java:115)
    ... 6 more

Here is code from APIReportProcessing part where it fails.

Below is the code where i am getting error.

 public static void fetchAPIReportDetail(String rawXMLReportFile) {
        File rawXMLReport = null;

        try {
            rawXMLReport = new File(rawXMLReportFile);
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(rawXMLReport);
            doc.getDocumentElement().normalize();
            individualModuleCount.add(passCount + "," + totalTestCount);
        } catch (Exception var13) {
            var13.printStackTrace();
            Logging.log("info", "Error in fetching up data from XML file. Exception:" + var13.getMessage());
        } finally {
            try {
                rawXMLReport.delete();
            } catch (Exception var12) {
                var12.printStackTrace();
                Logging.log("error", "Error in deleting XML data file. Exception:" + var12.getMessage());
            }

        }

Thanks, Bibek

Upvotes: 0

Views: 301

Answers (2)

user1726460
user1726460

Reputation: 107

Sorry for delayed response.

In my case the issue resolved with updating correct java version.Previous java version was IBM version where the issue occured.I changed it to the openjdk version "1.8.0_191" version.

Thanks, BIbek

Upvotes: 0

Dmitri T
Dmitri T

Reputation: 168072

  1. You need to increase heap not for JMeter but for Jenkins, check out How to add Java arguments to Jenkins? article for instructions.
  2. You might want to switch to XMLSlurper or XMLParser, both are SAX based therefore the memory footprint should be less.
  3. According to JMeter Best Practices you should rather be using CSV output format for JMeter result files, if you need to have the count of passed requests you could go for JMeterPluginsCMD Command Line Tool

Upvotes: 1

Related Questions