It is hard to answer such question as behaviour depends on at least those factors:
- The type of Stream : HLS will perform better than MPEG-DASH and HSS, the 2 latest being more CPU consuming due to XML format
- The duration of the Manifest, the biggest it is the more memory and parsing it will require
- The refresh period, the shortest it is, the more it will consume memory and CPU
So the best advice is to calibrate based on your Manifests.
Some advices regarding your questions:
Machine:
- Ensure you have enough bandwidth and network card
- With "average Manifest" , you should have no issue load testing 700 to 1500 Threads (Virtual Users) with machine of type m5.2xlarge (8 vCPU / 16 to 32 Go)
OS
- We advise you to use Linux/MacOS instead of Windows OS as you will get more Threads on same virtual/physical configuration.
- But all work since Java is used
For linux apply following tuning:
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
Allocate enough heap based on your calibration, for example to allocate 6g Heap:
-Xmx6g -Xms6g
Check in jmeter.log that the memory is really what you allocated, something like this, for 2g you would get:
2018-03-14 21:55:09,662 INFO o.a.j.JMeter: Max memory =2058 354 688
Some advised GC tuning:
-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
You can read more in this blog: