Ошибка Jenkins Out of Memory при запуске нескольких jmeter-скриптов - PullRequest
0 голосов
/ 25 октября 2019

У меня есть Jmeter / Jenkins / maven / Perforce Framework для тестирования API. Где каждый JMX содержит около 200 тестовых случаев. Каждый тестовый сценарий написан внутри группы потоков только с одним пользователем. В каждом тестовом примере есть какое-то предварительное условие для выборки данных из нескольких баз данных, а затем для запроса на нагрев, а также для использования нескольких утверждений с использованием bean-оболочки. Также мы использовали множество настроек jar, чтобы мы могли получить доступ к серверу и прочитать журналы или отредактировать файл свойств. там.

Если мы запустили скрипт из jmeter, он запустился гладко, но если мы запустим скрипт из Jenkins, скажем 20 jmx за раз последовательно, то через некоторое время это может быть 1 2 или 17 часов, он не показываетОшибка нехватки памяти.

Моя текущая конфигурация сервера Jenkins выглядит следующим образом:

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

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

Я уже настроил пространство кучи, как 6/8, 12/12.

Журнал во время сбоя:

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

Вот код из части APIReportProcessing, где происходит сбой.

Ниже приведен код, где я получаю ошибку.

 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());
            }

        }

Спасибо, Бибек

1 Ответ

1 голос
/ 28 октября 2019
  1. Вам нужно увеличить кучу не для JMeter, а для Jenkins, посмотрите Как добавить аргументы Java в Jenkins? статья для инструкций.
  2. Возможно, вы захотите переключиться на XMLSlurper или XMLParser , оба на основе SAX , поэтому объем памяти должен быть меньше.
  3. В соответствии с JMeter Best Practices вам лучше использовать выходной формат CSV для файлов результатов JMeter, если вам нужно иметь количество пропущенных запросов, которые вы можете использовать для командной строки JMeterPluginsCMDИнструмент
...