JMeter и UbikLoadPack: рекомендуемая настройка для нагрузочного тестирования серверов потокового видео

Мы используем Apache JMeter с плагином UbikLoadPack Video Streaming, предоставляющим форматы HLS, MPEG-DASH и MS Smooth, и скоро мы начнем массивное нагрузочное тестирование с наших инжекторов.

Какие рекомендуемые конфигурации с точки зрения:

  • Машина
  • Операционные системы
  • Тюнинг системы
  • Джава

1 ответ

Решение

Трудно ответить на такой вопрос, так как поведение зависит как минимум от следующих факторов:

  • Тип потока: HLS будет работать лучше, чем MPEG-DASH и HSS, последний из которых является более загружающим ЦП из-за формата XML
  • Продолжительность Манифеста, наибольшая - больше памяти и парсинга
  • Период обновления, чем он меньше, тем больше будет потреблять память и процессор

Поэтому лучший совет - это калибровка на основе ваших манифестов.

Несколько советов относительно ваших вопросов:

Машина:

  • Убедитесь, что у вас достаточно пропускной способности и сетевой карты
  • С "средним манифестом" у вас не должно быть проблемного нагрузочного тестирования от 700 до 1500 потоков (виртуальных пользователей) на компьютере типа m5.2xlarge (8 vCPU / от 16 до 32 Go)

Операционные системы

  • Мы рекомендуем вам использовать Linux/MacOS вместо ОС Windows, так как вы получите больше потоков в той же виртуальной / физической конфигурации.
  • Но все работает, так как используется Java

Для Linux применяются следующие настройки:

 net.ipv4.tcp_syncookies=1
 net.core.netdev_max_backlog=5000
 net.ipv4.tcp_max_syn_backlog=4096
 net.core.somaxconn=5000
 net.core.rmem_max=8388608
 net.core.wmem_max=8388608
 net.ipv4.tcp_no_metrics_save=1
 net.ipv4.tcp_keepalive_probes=2
 net.ipv4.tcp_keepalive_intvl=20
 net.ipv4.tcp_fin_timeout=15
 net.ipv4.tcp_max_syn_backlog=5000
 net.ipv4.tcp_keepalive_time=300
 net.ipv4.tcp_tw_recycle=0
 net.ipv4.tcp_tw_reuse=1
 net.ipv4.tcp_sack=1
 net.ipv4.tcp_dsack=0
 net.ipv4.ip_local_port_range= 1025 65000
 vm.swappiness = 5
 net.ipv4.tcp_slow_start_after_idle = 0

Джава

  • Убедитесь, что вы используете последнюю минорную версию Java 8 или 9.
  • Убедитесь, что вы используете Java 64 бит, чтобы иметь возможность выделить более 1,5/ 2 ГБ памяти. Проверьте это, запустив

    Java-версия

Выделите достаточно кучи на основе вашей калибровки, например, чтобы выделить 6 г кучи:

 -Xmx6g -Xms6g

Проверьте в jmeter.log, что память действительно соответствует тому, что вы выделили, что-то вроде этого, для 2g вы получите:

 2018-03-14 21:55:09,662 INFO o.a.j.JMeter: Max memory     =2058 354 688

Некоторые посоветовали GC тюнинг:

 -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=30 
 -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 
 -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false 
 -XX:MaxMetaspaceSize=256m -XX:G1HeapRegionSize=32m -Xss256k 

Вы можете прочитать больше в этом блоге:

Другие вопросы по тегам