Apache JMeter: нагрузочное тестирование сайтов и API | Глоссарий FREEHOSTING

JMeter

Apache JMeter
JMeter — Apache JMeter — открытый инструмент нагрузочного тестирования веб-приложений, API, баз данных и очередей. Имитирует тысячи виртуальных пользователей с заданными сценариями, собирает время отклика, throughput и ошибки. Используется для проверки SLA и поиска узких мест перед релизом.

Определение простыми словами

JMeter — это «толпа в коробке». Вы описываете сценарий пользователя (открыл главную → залогинился → положил товар в корзину), указываете количество одновременных потоков и длительность. Программа гоняет этот сценарий параллельно и показывает, на каком количестве RPS сервер начинает тормозить или падать.

Тесты пишутся в графическом GUI, но для CI и нагрузочных стендов запускаются в headless-режиме с JMX-файлом. Результаты — отчёт HTML с графиками отклика, перцентилями и таблицей ошибок. Полученные цифры сверяют с SLA и метриками Core Web Vitals. Альтернативы — k6, Locust, wrk, Gatling, Yandex Tank.

Сравнение

Инструмент Язык сценариев Сильная сторона Слабая сторона
Apache JMeter GUI + JMX (XML) Богатый плагинами, всё через UI Тяжёлый, JVM-память
k6 JavaScript Лёгкий, версионируется в Git Сложнее протоколы кроме HTTP
Locust Python Гибкие сценарии, простой DSL Меньше готовых плагинов
wrk Lua, CLI Простой стресс-тест за минуту Только HTTP
Gatling Scala/Kotlin DSL Высокий throughput, отчёты Порог входа

Кейсы использования

  • Тест магазина перед чёрной пятницей — 5000 виртуальных пользователей с реалистичным временем «думанья» 3–8 секунд.
  • API gateway — проверка лимита запросов, поиск точки деградации (когда p95 превышает 500 мс).
  • База данных — JDBC Sampler гоняет SQL-запросы и измеряет время ответа MySQL/Postgres под нагрузкой.
  • WebSocket чат — плагин websocket-samplers моделирует тысячи активных подключений.
  • Негативный сценарий: запустить JMeter с одного ноутбука против прода в 10 000 потоков — упадёт сам ноутбук, а не сервер. Распределённый стенд (1 master + 3–5 slave-машин) или облачные сервисы вроде BlazeMeter обязательны при больших нагрузках.

Технические детали

# Установка JMeter
wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz
tar xzf apache-jmeter-5.6.3.tgz
cd apache-jmeter-5.6.3/bin

# GUI для разработки сценария (на локальной машине)
./jmeter

# Headless-запуск на нагрузочном стенде
./jmeter -n -t test-plan.jmx 
  -l result.jtl 
  -e -o report-html/ 
  -Jthreads=500 -Jrampup=60 -Jduration=300

# Распределённый режим: master + 3 slave
./jmeter -n -t test-plan.jmx 
  -R slave1.local,slave2.local,slave3.local 
  -l result.jtl

# Анализ перцентилей из CSV
awk -F',' 'NR>1 {print $2}' result.jtl | sort -n 
  | awk 'BEGIN{c=0} {a[c++]=$1} END {print "p50=" a[int(c*0.5)], "p95=" a[int(c*0.95)], "p99=" a[int(c*0.99)]}'

Частые вопросы

Сколько потоков может выдать одна нода JMeter?

Зависит от тяжести сценария и JVM. Простой HTTP-GET — 1500–3000 потоков с 4 ГБ heap. Сложные тесты с большими телами и парсингом JSON — 300–500. Дальше нужен распределённый стенд.

Чем JMeter лучше k6 и Locust?

Готовые семплеры для JMS, JDBC, FTP, LDAP и десятки плагинов. Если тестируется только HTTP — k6 проще и легче. Под банковскую инфраструктуру JMeter покрывает больше протоколов.

Можно ли тестировать прод?

Технически да, но рискованно. Обычно поднимают staging-копию с теми же ресурсами или гоняют тест в окно минимальной активности с предупреждением команды и канареечным трафиком.