Size: a a a

QA — Load & Performance

2019 October 28

ВС

Вячеслав Смирнов in QA — Load & Performance
Alexander Lebedev
@smirnovqa если в курсе, есть ли софтовое ограничение на на виртуальных пользователей в JMeter? Видел где то статейку, i5+8gb дали примерно 9000 авктивных. Но я хочу запускать через агенты тимсити, там то железяки помощнее. Максимум во что могу упереться это количество активных подключений сети. Так вот и интересно на сколько я смогу разогнать один воркер?
Это извечный вопрос. Одним словом не ответить. В целом - есть ограничение.

На станции с 4 Гбайт ОЗУ делали раньше всегда 1000 потоков. Было у нас такое правило. Сильно не думали.

Потом подумав стал мониторить, сколько потоков создано и сколько памяти выделено.
И поделив одно на другое можно определить стоимость одного вашего потока. Она зависит от вашего сценария, постпроцессов. Примерно 10 КБайт и больше (с постпроцесорами, скачиванием больших ответов, ...). 8 000 000 / 10 = 800 000. Но зная точный размер памяти под поток можно определить сколько потоков можно уместить в 8 Гбайт для вашего скрипта.

Сделайте так. Запустите тест. Откройте jvisualvm. Откройте там jmeter. Сделайте полную сборку мусора, и сразу heap dump. Грубо поделив размер кучи на потоки получим средний размер. А если точно, то... Откройте heapdump в Memory Analyser (mat). Вверху в панели будет кнопка статистики потокам. Посмотрите сколько памяти в чистую заняли потоки. И точно поделите этот размер на их количество.

Много подключений создать тоже непросто. Надо станцию настраивать. Увеличить лимиты на диапазон исходящих соединений (диапазон портов), включить переиспользование сокетов, увеличить количество дескрипторов на процесс (по умолчанию 4096), ...

Тут необходимость большого количества пользователей приводит к вопросу ускорения работы сценария. Нужен же TPS, а не пользователи. Чем меньше тормозит сценарий, тем эффективнее используются потоки. Тем меньше их нужно.

И начать стоит с подбора таймера. Чем меньше поток спит в таймере, тем лучше он работает. Throughput Shaping Timer хорош. Другие таймеры тоже хороши. Их под задачу подбираете.

Ещё некоторые советы собрал в докладе Ускоряем Apache JMeter.
источник

СЧ

Сергей Чепкасов in QA — Load & Performance
Artem Rozhkov
Cпасибо, @smirnovqa ,@jigarkhwar , @chepk  за ответы.
Постараюсь более точнее задать вопрос.
А точнее описать кейс.
И точнее описать логику рпс как я ее вижу
Вот тут еще можно почитать про закрытую/открытую модели.
http://users.cms.caltech.edu/~adamw/papers/openvsclosed.pdf
источник

ΙΤ

Ιωάννης Τσεκούρι in QA — Load & Performance
Вячеслав Смирнов
Отличие JMeter от Gatling тут в наличии фиксированного пула потоков в JMeter.

Если тест на поиск максимума, то это важно.

При повышении нагрузки система начинает отвечать медленнее, тут gatling начинает добавлять пользователей, а JMeter просто не может этого делать. У него пользователей столько, сколько в пуле задано. И у gatling нагрузка не просядает, но он может упасть в out of memory, а JMeter не падает (если настроен) но у него нагрузка просядает.
через закрытую модель тоже просядет в гатлинге
источник

AR

Artem Rozhkov in QA — Load & Performance
Vladimir Sitnikov
Есть как минимум 2 вида rps: 'количество сценариев в секунду' и 'количество выполнений какого-нибудь шага в секунду'

Если сценарий это покупка в магазине, то может оказаться 100 покупок в час, и при этом 500 действий 'положить в корзину' в час. Вот вам и rps
За секунуду целый сценарий...хм интересно.
А каким образом это делаемся, что бы выйти на данную цифрую. Если я правильно понимаю, может быть рассинхрон в ответах от сервера и мы просто не сможем попасть в данную цифру?
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Artem Rozhkov
За секунуду целый сценарий...хм интересно.
А каким образом это делаемся, что бы выйти на данную цифрую. Если я правильно понимаю, может быть рассинхрон в ответах от сервера и мы просто не сможем попасть в данную цифру?
У каждого разные сценарии. И, да, сценарий «подключить услугу в личном кабинете» может состоять из нескольких шагов (залогиниться, нажать пару кнопок, перейти по нескольким страницам) и таких сценариев запросто может быть несколько в секунду.

>Если я правильно понимаю, может быть рассинхрон в ответах от сервера и мы просто не сможем попасть в данную цифру?

Это смотря как нагрузочные скрипты писать.
Если взять Precise Throughput Timer, то он будет точно попадать в целевой показатель «количества сценариев в секунду/часть/или что там у вас»

Подробнее я рассказывал в этом докладе (тогда timer ещё не входил в состав JMeter, а в 5.0+ он уже есть): https://www.youtube.com/watch?v=3PWBBc7rZxw
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Искал информацию по мониторингу, нашел репозиторий отличный

https://github.com/DataDog

Конкретно вот этот, со статьями, изучаю:
https://github.com/DataDog/the-monitor
источник

AR

Artem Rozhkov in QA — Load & Performance
Vladimir Sitnikov
У каждого разные сценарии. И, да, сценарий «подключить услугу в личном кабинете» может состоять из нескольких шагов (залогиниться, нажать пару кнопок, перейти по нескольким страницам) и таких сценариев запросто может быть несколько в секунду.

>Если я правильно понимаю, может быть рассинхрон в ответах от сервера и мы просто не сможем попасть в данную цифру?

Это смотря как нагрузочные скрипты писать.
Если взять Precise Throughput Timer, то он будет точно попадать в целевой показатель «количества сценариев в секунду/часть/или что там у вас»

Подробнее я рассказывал в этом докладе (тогда timer ещё не входил в состав JMeter, а в 5.0+ он уже есть): https://www.youtube.com/watch?v=3PWBBc7rZxw
А я его добавил, спасибо
источник

AG

Alex Grishutin in QA — Load & Performance
Вячеслав Смирнов
Искал информацию по мониторингу, нашел репозиторий отличный

https://github.com/DataDog

Конкретно вот этот, со статьями, изучаю:
https://github.com/DataDog/the-monitor
сложная интеграция с метром как по мне, точнее не самая обычная....

У меня пока получилось только через агент настроить лиснер лога (метра) и потом его парсить через встроенный "generate metrics" который в бете.... и то не всегда все логи отпаршивает
источник

AG

Alex Grishutin in QA — Load & Performance
а вот как отдельный мониторинг системы - огонь
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
Коллеги, добрый день! Кто может подскажет откуда ноги растут?
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
Пытаюсь сохранить тело запроса в препроцессоре
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
Jsr223
источник

AG

Alex Grishutin in QA — Load & Performance
а код сам дср можно?)
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
По документации вроде корректно, но может и в глаза долблюсь...
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
При получении через контекст также ошибка
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
Но при этом значение сохраняется)))
источник

AK

Alexey Kübler-Ross in QA — Load & Performance
источник

AG

Alex Grishutin in QA — Load & Performance
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
String body = ctx.getCurrentSampler().getArguments().getArgument(0).getValue();
vars.put("body", body);
источник