Size: a a a

QA — Load & Performance

2020 April 07

KY

Kirill Yurkov in QA — Load & Performance
Kirill Yurkov
всем привет. может у кого есть опыт с подобной проблемой. не можем понять почему периодически операции на приложении выполняются долго. приложение .net, крутится на iis, два хоста + балансировщик. замеряли dotTrace - там оптимизировали уже по максимуму, смотрели по памяти через профайлер VS. интересно то, что ресурсы в этот момент в норме, по-крайней мере те что вижу, высокие отклики появляются на всех операциях, не на какой-то конкретной. периодичность есть, но не фиксированная. CPU - ровная линяя, не нагружен более 30%. очередей на процессоре нет, памяти свободной масса - по ней тоже нет скачков особых. места на диске сполна, на диске есть странное поведение, но его может вызывать логирование (без логов ситуация соблюдается). система полностью заглушается, кроме БД. по трафику тоже скачков особых нет, но все аппаратные графики усредняет заббикс, по-этому гарантий нет. больше всего подозрений вызывают метрики IIS. треды и процессы тоже не вызывают особых подозрений. все графики за один интервал показаны
по этой проблеме удалось выяснить, что проблема - обновление данных приложения через БД по флагу в базе. использовали dotTrace пускали и стопали в цикле с длительностью 10 сек одной итерации, пока в итерацию не входил пик. только сравнение нескольких пиков с участками без всплесков дало примерное понимание проблемы, так как напрямую эта операция не влияла не на что и выполнялась быстро
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Kirill Yurkov
#jmeter тут сделал легкую проверку работы балансировщика с возможностью понять откуда получаем проблемные запросы.
на каждый семплер-обращение к системе делаем 1 Dummy Sampler, из семплера обращения с помощью jsr223 postproccesor списываем все нужные нам данные:
def sampleResult = prev;
TransactionName = sampleResult.getSampleLabel();
responseTime = sampleResult.getTime();
size = sampleResult.getBytesAsLong();
isSuccessful =sampleResult.isSuccessful();
connect = sampleResult.getConnectTime()
latenct = sampleResult.getLatency()
vars.put("respTime", responseTime.toString())
vars.put("latency", latenct.toString())
vars.put("connect", connect.toString())
из хидеров запроса можно регуляркой дернуть хост ответа.
его подставляем в имя Dummy Sampler - заполняем остальные поля и получаем детальный повтор каждого семплера, который может включать в себя ответы из предыдущего и не создавать доп нагрузку на систему :)
Это такой способ программно создать SampleResult, только не подзапросом, а верхнего уровня?
источник

KY

Kirill Yurkov in QA — Load & Performance
Вячеслав Смирнов
Это такой способ программно создать SampleResult, только не подзапросом, а верхнего уровня?
это позволяет вывести удобно семплеры дебага в графики, так как например логирование было бы слишком объемным в данном случае, писать отдельные подзапросы в инфлюкс для дальнейшей агрегации - тоже. а в ситуации, когда нужно понимать зависят ли запросы от тела ответа/хидеров или еще чего то - дублировать их со всеми нужными данными это легкий путь
источник

KY

Kirill Yurkov in QA — Load & Performance
условно я подаю нагрузку в 1000 рпс и вижу что иногда есть какие то пики, пытаюсь понять есть ли у них связь с определенной машиной-хостом приложения
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Понял. Интересная идея. Я логировал в InfluxDB, используя java client, используя okhttp, ...
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Ешё можно выставить максимальное время ответа в http sampler, тогда все долгие будут ошибочными и их логировать с телом
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Такой вопрос: словом «корреляция» кто-нибудь пользуется?
Вот, подозреваю, что в «в loadrunner’е корреляция крутая, а в jmeter’е её нет».

Кто-нибудь может пояснить или ссылку какую-нибудь кинуть?

Прислали PR: https://github.com/apache/jmeter/pull/499

Но, блин, либо я тупой, либо реально муть какую-то прислали.
Куча кода, но непонятно что зачем и как они там коррелируют 🙁
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Vladimir Sitnikov
Такой вопрос: словом «корреляция» кто-нибудь пользуется?
Вот, подозреваю, что в «в loadrunner’е корреляция крутая, а в jmeter’е её нет».

Кто-нибудь может пояснить или ссылку какую-нибудь кинуть?

Прислали PR: https://github.com/apache/jmeter/pull/499

Но, блин, либо я тупой, либо реально муть какую-то прислали.
Куча кода, но непонятно что зачем и как они там коррелируют 🙁
Аналог: https://github.com/abstracta/ScriptGenerator
Сравнение двух Fiddler-сессий на входе, на выходе параметризированный скрипт
источник

KY

Kirill Yurkov in QA — Load & Performance
Vladimir Sitnikov
Такой вопрос: словом «корреляция» кто-нибудь пользуется?
Вот, подозреваю, что в «в loadrunner’е корреляция крутая, а в jmeter’е её нет».

Кто-нибудь может пояснить или ссылку какую-нибудь кинуть?

Прислали PR: https://github.com/apache/jmeter/pull/499

Но, блин, либо я тупой, либо реально муть какую-то прислали.
Куча кода, но непонятно что зачем и как они там коррелируют 🙁
корреляция это подпонятие параметризации, которое означает поиск и реализацию зависимости запросов (один коррелирует с другим), например по сессии или по токену. ЛР сам находит повторы в ветке запросов и их подменяет на переменные. а параметризация тогда это увеличение вариативности скрипта
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
В современном вебе автоматическая корреляция почти не работает. Из-за того, что запросы отправляются в разном порядке, динамически. Поэтому не пользовался ею в LoadRunner
источник

KY

Kirill Yurkov in QA — Load & Performance
я с первого дня не доверял этой штуке
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
А для простых сценариев, опять же проще сделать руками, так как сценарий простой, и ошибаться в нем не хочется
источник

KY

Kirill Yurkov in QA — Load & Performance
Vladimir Sitnikov
Такой вопрос: словом «корреляция» кто-нибудь пользуется?
Вот, подозреваю, что в «в loadrunner’е корреляция крутая, а в jmeter’е её нет».

Кто-нибудь может пояснить или ссылку какую-нибудь кинуть?

Прислали PR: https://github.com/apache/jmeter/pull/499

Но, блин, либо я тупой, либо реально муть какую-то прислали.
Куча кода, но непонятно что зачем и как они там коррелируют 🙁
эта штука выглядит здраво для своих задач
источник

KY

Kirill Yurkov in QA — Load & Performance
другой вопрос что она без надобности, как по мне)
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
@Quantum_Cupcake @Aleksandr00000 @beton_kruglosu_tochno делают автокорреляцию (параметризацию) в https://bumq.io/?lang=ru. Сравнением har-логов.

Это упрощает формирование скриптов, или вообще автоматизирует процесс. Что важно на большом потоке задач.

На то у них и сервис.

Для ручной работы стоит использовать, только если тест строится на основе selenium теста (есть такое в Альфа-Банке).

Или если скрипт из 100 и больше запросов. Такие скрипты в JMeter может кто-то и пишет. Я стараюсь не писать длинные
источник

ПБ

Пётр Байкалов in QA — Load & Performance
(я не делаю)
источник

ВС

Вячеслав Смирнов in QA — Load & Performance
Ещё современных систем с basic аутентификацией очень мало. Для них такие инструменты подойдут - дважды вводишь один логин и пароль, а получаешь разный токен. Значит этот токен - параметр.

Сейчас чаще встречается OAuth 2.0, а этот механизм не получится автоматически скоррелировать
источник

РН

Роман Новиков in QA — Load & Performance
про гатлинг обучающие курсы и ссылки на них кто-то уже скидывал? в истории чата найти не могу
источник

РН

Роман Новиков in QA — Load & Performance
всем привет*)
источник

AR

Artem Rozhkov in QA — Load & Performance
Роман Новиков
всем привет*)
Есть ищи по udemy
источник