0

В настоящее время я работаю над созданием структуры производительности с использованием jenkins и выполнением теста производительности от Jenkins. Я использую https://github.com/jmeter-maven-plugin/jmeter-maven-plugin этот плагин. Тест на работоспособность с одним пользователем в этой структуре производительности работал хорошо и прошел проверку производительности на 200 пользователей и в течение 2 минут получил ошибку java.lang.OutOfMemoryError: превышен верхний предел GC Я пробовал следующее в jenkins.xmlJenkins java.lang.OutOfMemoryError: превышен верхний предел GC

<arguments>-Xrs -Xmx2048m -XX:MaxPermSize=512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --prefix=/jenkins --webroot="%BASE%\war"</arguments> 

, но он не работает, а также отметил, что всякий раз, когда я увеличил Запоминающее устройство остановку Дженкинс службы и должен был уменьшить объем памяти до 1 Гб, а затем перезапуск службы.

Возможно, увеличена память для jmeter и java, но нет помощи. В дереве результатов просмотра файла .jmx и любом другом слушателе отключено, но проблема все еще сохраняется.

Поскольку я делаю POC Дженкинс размещен в моем ноутбуке и высокие спецификации уровня следующим системы Модель: Latitude E7270 Процессор: Intel (R) ядро ​​(TM) i5-6300U CPU @ 2,40 ГГц (4CPU'S), ~ 2.5GHZ Память: 8192MB ОЗУ

Любая помощь пожалуйста?

+0

Какая ошибка при увеличении объема памяти (PermSize или кучи?) До 2 ГБ? И какие характеристики машины все это работает? – hardillb

+0

С тех пор как я занимаюсь POC jenkins размещен на моем ноутбуке и его высокоуровневых спецификациях следующим образом: Модель системы: Latitude E7270 Процессор: Intel (R) Core (TM) i5-6300U CPU @ 2.40GHZ (4CPU), ~ 2.5 GHZ Память: 8192MB RAM Нет ошибки, когда я увеличиваю память до 2 ГБ (ее единственная куча, которую я думаю) просто останавливает службу jenkins –

+0

Отредактируйте вопрос, чтобы добавить эту информацию и включить информацию о том, какая строка cmd arg изменилась для увеличения памяти до 2 ГБ. – hardillb

ответ

0

Ошибка, связанная с GC overhead, подразумевает, что Дженкинс бьет в Сбор мусора. Это означает, что он, вероятно, тратит больше времени на сборку мусора, чем на полезную работу.

Эта ситуация обычно возникает, когда куча слишком мала для приложения. С современными многопользовательскими схемами кучи трудно сказать, что именно нужно изменить.

Я хотел бы предложить включить Verbose GC со следующими параметрами "-verbose: дс -XX: + PrintGCDetails -XX: + PrintGCTimeStamps"

Затем следуйте советам здесь: http://www.oracle.com/technetwork/articles/javase/gcportal-136937.html

+0

"-verbose: gc -XX: + PrintGCDetails -XX: + PrintGCTimeStamps" следует ли это включить в jenkins.xml? –

0

отметить несколько моментов

  1. Вы используете интегрированную цель maven для запуска тестов jmeter. Это будет использовать Jenkins в качестве контейнера для запуска ваших тестов jmeter, тем самым не только влияя на вашу работу, но и других пользователей jenkins.
  2. Лучше отложить выполнение на другой клиентской машине, как специализированная машина jmeter, которая использует свою собственную JVM с параметры для запуска ваших тестов (OR) используйте тот, который вы предоставляете

в целом, 1. Подведите выполнение теста из Дженкинс 2. обеспечить вывод отчета в качестве входных данных для вашей производительности подключаемого в [это также может произойти сбой, так как для обработки результатов теста на выносливость, например, 8-часового файла результата потребуется больше памяти JVM]

Таким образом, ваши тесты будут иметь больше шансов на масштабирование. Кроме того, вы не указали, какой тип скриптового движка вы используете. AS для документации Jmeter, JSR223 с groovy имеет утечку памяти. Пожалуйста, обратитесь к http://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler

Попробуйте добавить -Dgroovy.use.classvalue = true, чтобы узнать, помогает ли это (при использовании groovy). Если вы используете Java 8, существует высокая вероятность того, что он создает уникальный класс для всех ваших скриптов в jmeter и увеличивает метапространство, находящееся за пределами вашей JVM.В этом случае ограничьте метапространство и используйте разгрузку классов и 64-разрядную JVM, как

-d64 -XX: + CMSClassUnloadingEnabled.

Кроме того, каково ваше новое поколение. -XX: NewSize = 1024 м -XX: MaxNewSize = 1024 м? Обратите внимание, что jmeter загружает все файлы на постоянной основе и переходит непосредственно к старому поколению, тем самым сокращая доступное пространство для нового поколения.

+0

Я не использую пробоотборник JSR223. относительно определения или изменения размера нового поколения, нужно ли указывать в jmeter, который я установил в своем ноутбуке? и я не совсем понимаю предложение о переносе тестового исполнения из jenkins и предоставить отчет в качестве вклада в плагин? не могли бы вы рассказать об этих аспектах? –

+0

Когда вы используете плагин jmeter maven, выполнение использует JVM-процесс jenkins и классы jmeter, и все загружается в jenkins. Это плохая модель для масштабирования, поскольку вы используете jenkins в качестве хоста контроллера для запуска теста. Вы должны добавить подставку jenkins (еще одна машина для Windows с установленным jmeter) и запустить тест от ведущего мастера к подчиненному устройству. Мастер Jenkins может подключиться к рабочему скрипту и запустить оконный скрипт. Используйте интерфейс командной строки jmeter для запуска теста и использования CmdRunner для обработки ваших результатов. – Selva

+0

И да - вся настройка GC, которую вы делаете в текущей модели, будет для JVM jenkins, поскольку плагин maven работает в JVM Jenkins. Вы должны установить новое поколение JVM Jenkins точно так же, как вы увеличили размер кучи – Selva