Цели Разрабатывать такие тесты, чтобы система тормозила, а не Apache.JMeter. Экономить на ресурсах нагрузочных агентов. Разрабатывать тесты быстро и просто.
HTTP Request Максимальная интенсивность
Samplers.HTTP.Request.X. Простой тест
Несколько GET-запросов на локальный сервер
Запуск и остановка NGinx в тесте, используя OS Process Sampler
Ускорение в 1,6 раза — c 4800/s до 7700/s
и избавление от ошибок Address not available
при расширения диапазона портов net.ipv4.ip_local_port_range (1025 60999)
netstat: tcp_time_wait (32 768, не 59 975)
новый лимит — симптомы полечены, проблема осталась
Linux: net.ipv4.tcp_max_tw_buckets (32768)
Расширим размер очереди TIME_WAIT
Значение в Linux можно посмотреть с помощью команды cat так:
cat /proc/sys/net/ipv4/tcp_max_tw_buckets32768
Linux: net.ipv4.tcp_max_tw_buckets (65536)
Расширим размер очереди TIME_WAIT (временно)
Увеличим в два раза до значения 65536. Временную настройку можно выполнить так:
Увеличение размера очереди TIME_WAIT net.ipv4.tcp_max_tw_buckets (65536)
не дало положительного эффекта для скорости,
но нет больше полки для netstat: tcp_time_wait
SJK: socketConnect (54,85%)
Apache.JMeter ждёт соединения
Linux: net.ipv4.tcp_tw_reuse (1)
Разрешим переиспользовать TIME_WAIT
По умолчанию для исходящих подключений нельзя использовать TIME_WAIT-соединения.
Ошибка OutOfMemoryError уже для файла в 1100 МБайт
HTTP Request с настройками по умолчанию,
расходует очень много памяти
4-х кратный буфер от размера файла
генерируя объекты по 1,8 ГБайт/с,
но качает 200 ГБайт за 5 минут
☑️ Save response as MD5 Hash
экономит память при скачивании больших файлов
200 ГБайт с MD5 скачивались дольше
Параметр
Значение
Среднее время
5475 ms
Длительность
18 минут 17 сек
Необходимая память
0 МБайт (минимум)
Трафик памяти при включенном MD5 нулевой
Память не использовалась вообще, CPU тоже меньше
SJK: MessageDigest (66.90%)
JMeter считает MD5 в два раза дольше, чем читает
☑️ Save response as MD5 Hash
экономит память до 0,
экономит процессорное время,
не имеет ограничений на размер файла,
но замедляет скачивание до 3-x раз
Как скачивать быстро
с минимальными расходами памяти
из Apache.JMeter? Может быть curl/wget и bash помогут?
OS Process Sampler + JSR-223 PostProcessor
позволяют вызывать консольные инструменты,
которые хорошо работают с большими файлами.
Так wget даёт ускорение в 2 раза,
и в 7 раз по сравнению с MD5.
Попробуем ограничить читаемый размер до 100 байт
httpsampler.max_bytes_to_store_per_request=100
# Max size of bytes stored in memory per SampleResult# Ensure you don't exceed max capacity of a Java Array and remember# that the higher it is, the higher JMeter will consume heap# Defaults to 0, which means no truncation#httpsampler.max_bytes_to_store_per_request=0
Всё просто прекрасно,
но загружаемые файлы должны быть готовы.
Если нужна параметризация содержимого, то
чем заменить вкладку Body Data?
HTTP Request. Отправка файлов
Как готовить файлы на 10 ГБайт?
Во время теста! С минимальными затратами!
OS Process Sampler: tar, gzip, sed, ...
Подготовить архив, распаковать, заменить в нём строки
HTTP Request. Отправка файлов
Большие файлы лучше читать с диска.
Большие тела запросов лучше читать с диска.
Готовить большие файлы удобно с gzip, sed, ... Пользуйтесь вкладкой Files Upload,
где также можно загружать и тело запроса.
PostProcessor-ы
Как отличается их скорость?
Тестовая страница: apache.jmeter.org
Найдём заголовок страницы
Boundary Extractor
для htmlContent
Regular Expresion Extractor
для htmlContent
JSR-223 PostProcessor
JSR-223 PostProcessor
aналогичный работе Boundary Extractor
BeanShell PostProcessor
BeanShell PostProcessor
Аналогичный работе Boundary Extractor
CSS Selector Extractor
для htmlContent
XPath Extractor
XPath (HTML) для htmlContent
Boundary (58k) самый быстрый
RegExp (50k) почти такой же быстрый
Общее влияние PostPorcessor-ов небольшое
Так CSS Selector выполняется дольше CSV Logger лишь в 2 раза
PostProcessor для HTML
Точно не использовать XPath для HTML.
Лидеры RegExp и Boundary Extractor.
Но и CSS Selector неплох — лишь x2 от логгера.
PreProcessor-ы
Как быстро подготовить XML?
Как быстро подготовить XML?
groovy.xml.MarkupBuilder x5 от SimpleTemplateEngine
PreProcessor-ы
В Groovy groovy.xml.MarkupBuilder быстрее SimpleTemplateEngine, быстрее сериализации.
И экономит много времени.
Секретное оружие
Как быстро разрабатывать скрипты на JMeter? Как быстро скачивать расширения и библиотеки? Как запустить профилирование теста? Как не терять изменения в скрипте?