JMeter OutOfMemory из-за отличных скриптов, создающих несколько классов - PullRequest
0 голосов
/ 19 февраля 2019

Я запускаю несколько тестов, используя JMeter 3.1.Некоторые из этих тестов используют JSR223 Sampler, который использует скрипт Groovy для оценки значений и возврата результатов.

Эти тесты запускаются с клиента, использующего Java 8, обновление 112.

Когда я запускаю эти тестыобъем динамической памяти постепенно увеличивается, вплоть до того, что вызывает исключение «Недостаточно памяти» и дамп динамической памяти.

Я использовал Java VisualVM для проверки прогресса памяти и обнаружил, что загружаемые классы постоянно увеличиваютсядо 100 000 загруженных классов.

Итак, я запустил JMeter, используя -verbose: classes, и есть тысячи строк относительно загрузки классов "Script", таких как:

[Loaded Script1 from file: /groovy/script]
[Loaded Script2 from file: /groovy/script]
[Loaded Script3 from file: /groovy/script]
[...]
[Loaded Script2409 from file: /groovy/script]

И т. Д.

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

Все эти проверки выполняются с помощью:

evaluate(new File("...\script.groovy"))

Я сам не сделал файл script.groovy, но могу проверить его при необходимости.

Редактировать: я пробовал новый тест с пустым скриптом groovy, и загрузка классов точно такая же,так что это не имеет никакого отношения к содержанию скрипта.

1 Ответ

0 голосов
/ 19 февраля 2019

Эта проблема связана с версией groovy, используемой в JMeter 3.1.

Эта версия JMeter теперь довольно старая, вам следует обновить ее до JMeter 5.0 или 5.1 (выпущенной через несколько часов), в которую добавлено большепоследние версии Groovy, в которых эта проблема была исправлена.

См. также this об использовании Groovy

При использовании Groovy в качестве языка сценариев и без проверки скомпилированного сценария Cacheесли доступно (хотя рекомендуется кэширование), вам следует установить это свойство JVM -Dgroovy.use.classvalue = true из-за утечки памяти Groovy.

Ссылки по теме:

Если вы хотите узнать больше о производительноститестирование и JMeter, эта книга поможет вам.

...