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
Вы можете прочитать больше в этом блоге: