Запуск сценария Jmeter через ошибку jenkins Out of Memory при создании отчета - PullRequest
0 голосов
/ 03 октября 2019

Я сталкиваюсь с проблемой «Недостаточно памяти» при запуске сценария Jmeter через Jenkins. Процесс заключается в написании кода, написанного на платформе, которая преобразует сгенерированный результат XML-файла в CSV, а затем в HTML для публикации отчета на панели инструментов.

Я уже пробовал увеличить пространство кучи сервера Jenkins до 25 ГБ из 32 ГБ. Кажется, сначала требуется 1 ГБ, а затем через несколько раз выдает ошибку, даже несмотря на то, что в куче все еще есть 24 ГБ доступной памяти, я запустилбесплатно -h для этого.

Также попытался увеличить память Jmeter, установив HEAP = -Xms1g -Xmx8g -XX: MaxMetaspaceSize = 512m

Сценарий нормально выполнялся на сервере Jnekins, который находится на Windows.ButЭто ошибка, когда сервер jenkin работает в режиме Linux.

Слушай, мой журнал ошибок.

/var/lib/jenkins/workspace/ITT2_Execution/Resources/csvReportPath/ITT2_Unicast_Broker_Download_count.xml/var/lib/jenkins/workspace/ITT2_Execution/Resources//Configuration/transformGaurav.xsl/var/lib/jenkins/workspace/ITT2_Execution/jmeter_reports/ITT2_Unicast_Broker_Download_2_Oct_2019_19_3_52_Count.html{titleReport=ITT2_Unicast_Broker_DownloadCountReport, dateReport=2-Oct-2019 22:02:38}
Finished Parsing
/var/lib/jenkins/workspace/ITT2_Execution/Resources/csvReportPath/AutomationReport_5.2.4.2018.20_2_Oct_2019_19_3_52_count.xml/var/lib/jenkins/workspace/ITT2_Execution/Resources//Configuration/transformGaurav.xsl/var/lib/jenkins/workspace/ITT2_Execution/jmeter_reports/AutomationReport_5.2.4.2018.20_2_Oct_2019_19_3_52.html{titleReport=nullCountReport, dateReport=2-Oct-2019 22:02:39}
JVMDUMP039I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" at 2019/10/02 18:33:10 - please wait.
JVMDUMP039I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" at 2019/10/02 18:33:10 - please wait.
JVMDUMP032I JVM requested Heap dump using '/var/lib/jenkins/workspace/ITT2_Execution/heapdump.20191002.183310.40181.0001.phd' in response to an event
JVMDUMP010I Heap dump written to /var/lib/jenkins/workspace/ITT2_Execution/heapdump.20191002.183310.40181.0001.phd
JVMDUMP032I JVM requested System dump using '/var/lib/jenkins/workspace/ITT2_Execution/core.20191002.183310.40181.0002.dmp' in response to an event
JVMDUMP010I System dump written to /var/lib/jenkins/workspace/ITT2_Execution/core.20191002.183310.40181.0002.dmp
JVMDUMP032I JVM requested Java dump using '/var/lib/jenkins/workspace/ITT2_Execution/javacore.20191002.183310.40181.0003.txt' in response to an event
JVMDUMP010I Java dump written to /var/lib/jenkins/workspace/ITT2_Execution/javacore.20191002.183310.40181.0003.txt
JVMDUMP032I JVM requested Snap dump using '/var/lib/jenkins/workspace/ITT2_Execution/Snap.20191002.183310.40181.0005.trc' in response to an event
JVMDUMP010I Snap dump written to /var/lib/jenkins/workspace/ITT2_Execution/Snap.20191002.183310.40181.0005.trc
JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
JVMDUMP032I JVM requested Heap dump using '/var/lib/jenkins/workspace/ITT2_Execution/heapdump.20191002.183310.40181.0004.phd' in response to an event
JVMDUMP010I Heap dump written to /var/lib/jenkins/workspace/ITT2_Execution/heapdump.20191002.183310.40181.0004.phd
JVMDUMP032I JVM requested Java dump using '/var/lib/jenkins/workspace/ITT2_Execution/javacore.20191002.183310.40181.0006.txt' in response to an event
JVMDUMP010I Java dump written to /var/lib/jenkins/workspace/ITT2_Execution/javacore.20191002.183310.40181.0006.txt
JVMDUMP032I JVM requested Snap dump using '/var/lib/jenkins/workspace/ITT2_Execution/Snap.20191002.183310.40181.0007.trc' in response to an event
JVMDUMP010I Snap dump written to /var/lib/jenkins/workspace/ITT2_Execution/Snap.20191002.183310.40181.0007.trc
JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
[WARNING] 
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.scanCharReference(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(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.fetchAPIReportDetailModuleWise(APIReportProcessing.java:110)
    at jmeterRun.RunProcess.prepareFinalResultsMerged(RunProcess.java:228)
    at jmeterRun.ControllerJMeter.main(ControllerJMeter.java:139)
    ... 6 more
[WARNING] Attempt to (de-)serialize anonymous class hudson.maven.reporters.MavenArtifactArchiver$2; see: https://jenkins.io/redirect/serialization-of-anonymous-classes/
[WARNING] Attempt to (de-)serialize anonymous class hudson.maven.reporters.MavenFingerprinter$1; see: https://jenkins.io/redirect/serialization-of-anonymous-classes/

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Согласно Понимание исключения OutOfMemoryError * статья 1002 *:

Исключение в потоке имя_потока: java.lang.OutOfMemoryError: пространство кучи Java

Причина: подробное сообщение Пространство кучи Java указывает, что объект не может быть выделен в куче Java. Эта ошибка не обязательно означает утечку памяти. Проблема может быть такой же простой, как проблема конфигурации, когда указанный размер кучи (или размер по умолчанию, если он не указан) недостаточен для приложения. В других случаях, в частности для долгоживущего приложения, сообщение может указывать на то, что приложение непреднамеренно хранит ссылки на объекты, и это предотвращает сбор мусора для объектов. Это эквивалент языка Java утечки памяти. Примечание: API, которые вызываются приложением, также могут непреднамеренно хранить ссылки на объекты.

Еще один потенциальный источник этой ошибки возникает в приложениях, которые чрезмерно используют финализаторы. Если у класса есть метод finalize, то объекты этого типа не освобождают свое пространство во время сборки мусора. Вместо этого после сборки мусора объекты помещаются в очередь для завершения, что происходит позже. В реализации Oracle Sun финализаторы выполняются потоком демона, который обслуживает очередь финализации. Если поток финализатора не может идти в ногу с очередью финализации, тогда куча Java может заполниться, и этот тип исключения OutOfMemoryError будет вызван. Один из сценариев, который может вызвать эту ситуацию, заключается в том, что приложение создает высокоприоритетные потоки, которые приводят к увеличению очереди финализации со скоростью, превышающей скорость, с которой поток финализатора обслуживает эту очередь.

Действие:Вы можете найти больше информации о том, как отслеживать объекты, для которых завершение завершено, в Контролировать объекты, ожидающие завершения.

Поэтому используйте Java Memory Map инструмент дляисследуйте самые большие объекты и к какому процессу они относятся.

Также кажется, что вы используете Jenkins под Linux или другой Unix-подобной ОС, в то время как команда SET зависит от Windows. Кроме того, Jenkins не учитывает переменную окружения HEAP, вместо этого он использует JAVA_ARGS и / или JENKINS_JAVA_OPTIONS.

Для JMeter:

HEAP="-Xms1g -Xmx8g" && export HEAP

Для Дженкинса:

JENKINS_JAVA_OPTIONS="-Xms1g -Xmx8g" && export JENKINS_JAVA_OPTIONS

Дополнительная информация:

0 голосов
/ 03 октября 2019

Процесс JMeter выполняется на виртуальной машине Java (JVM) с различными настройками и аргументами. Пространство кучи Java (как указано в сообщении об ошибке) - это память, которую JVM берет из базовой операционной системы для выделения пространства для создания необходимых объектов.

Конфигурация JMeter по умолчанию (см. Jmeter.bat для Windowsили jmeter для сценариев, отличных от Windows), предполагает размер кучи только 512 мегабайт. Это на самом деле довольно мало, учитывая, что многие современные смартфоны имеют до четырех раз больше! Если в вашем тесте запущены массивные объекты объемом более 512 МБ, вы получите ошибку OOM, и ваш тест не пройдёт.

К счастью, есть простое решение. Просто увеличьте максимальный размер кучи до ~ 80% от общего объема доступной физической памяти. Для этого найдите следующую строку в скрипте запуска JMeter:

HEAP = "- Xms1g -Xmx25g"

Теперь измените значение -Xmx соответствующим образом. Например: если вы хотите установить максимальный размер кучи в 25 гигабайт, вам нужно изменить строку на:

HEAP = "- Xms1g -Xmx25g"

Чтобы применить изменения, вам нужно перезапустить JMeter.

...