JMeter работает внутренне: зачем циклически создавать и оставлять все больше и больше классов? - PullRequest
0 голосов
/ 23 октября 2019

Я начал отслеживать JMeter со скриптом, работающим, например, с Jconsole, и отмеченное количество классов постепенно увеличивается, затем быстро уменьшается, а затем снова постепенно увеличивается.

enter image description here

Это типичное поведение JMeter? Может быть, даже JVM в целом? Или конкретный код плагина должен быть задействован? Я обеспокоен тем, что для уменьшения количества классов GC запускается, и это может повлиять на непрерывность генерируемой нагрузки. Мне не удалось найти ответ с помощью веб-поиска.

ДОБАВЛЕНО: План тестирования включает создание сэмплеров HTTP-запросов, JSON Assertions , с использованием группы потоков параллелизма для увеличенияпошаговая загрузка + рандомизация ( Случайный контроллер , элемент конфигурации случайных величин).

ДОБАВЛЕНО 2: Следуя совету Дмитрия, я запускаю тест JVM_ARGS="-Xlog:class+unload -Xlog:class+load"; jmeter ... в течение примерно 60 минут (тест 3600 секунд)Я загрузил около 116 000 классов и 68 000 классов выгружен, ниже показаны все выгруженные классы с временем загрузки (jdk.nashorn.internal.scripts.Script принимают большинство случаев и среднее время подтверждают, что это произошло когда-то во время теста - технически правильно не только при запуске или только приотделка) (из блокнота Юпитера):

                                                        time
                                                      size  mean
classname       
java.lang.invoke.LambdaForm                          978.0  29.757680
jdk.nashorn.internal.runtime.Context                11.0    17.486000
jdk.nashorn.internal.scripts.ModuleGraphManipulator 305.0   17.489377
jdk.nashorn.internal.scripts.Script                 66845.0 2308.991561

Есть еще какие-нибудь советы? Что искать дальше?

1 Ответ

1 голос
/ 23 октября 2019

Я бы сказал, что это связано с some randomization, так как другие упомянутые тестовые элементы вряд ли вызовут увеличение количества загруженных классов и вызовут выгрузку.

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

Вы можете добавить следующие параметры JVM к вашей команде запуска JMeter:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

, чтобы вы могли видеть, какие именно классы загружаются / выгружаются вданный момент времени.

К сожалению, невозможно представить дополнительную информацию, не видя свой план тестирования и аргументы JVM, просто убедитесь, что вы следуете рекомендациям 9 Easy Solutions для нагрузочного теста JMeter«Недостаточно памяти». В статье отсутствует уверенность в том, что ваш тест не потерпит крах из-за утечки памяти , поскольку JMeter дает достаточно свободы для выстрела собственной ногой.

...