JMeter 和 UbikLoadPack:建议调整负载测试视频流服务器
JMeter and UbikLoadPack : Advised tuning for load testing video streaming servers
我们正在使用 Apache JMeter with UbikLoadPack 提供 HLS、MPEG-DASH 和 MS Smooth 格式的视频流插件,我们将很快开始对注入器进行大规模负载测试。
在以下方面有哪些推荐配置:
- 机器
- OS
- 系统调优
- Java
很难回答这样的问题,因为行为至少取决于这些因素:
- Stream 的类型:HLS 将比 MPEG-DASH 和 HSS 表现更好,由于 XML 格式
,最新的 2 个 CPU 消耗更多
- Manifest 的持续时间,最大的是它需要更多的内存和解析它
- 刷新周期,越短越消耗内存CPU
所以最好的建议是根据您的清单进行校准。
关于您的问题的一些建议:
机器:
- 确保你有足够的带宽和网卡
- 使用 "average Manifest" ,使用 m5.2xlarge 类型的机器(8 vCPU / 16 到 32 Go)负载测试 700 到 1500 个线程(虚拟用户)应该没有问题
OS
- 我们建议您使用 Linux/MacOS 而不是 Windows OS,因为您将在相同的 virtual/physical 配置上获得更多线程。
- 但是使用 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
- 确保您使用 Java 8 或 9 的最后一个次要版本。
确保您使用 Java 64 位能够分配超过 1.5/ 2GB 的内存。通过 运行
检查
java-版本
根据您的校准分配足够的堆,例如分配 6g 堆:
-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
您可以在此博客中阅读更多内容:
我们正在使用 Apache JMeter with UbikLoadPack 提供 HLS、MPEG-DASH 和 MS Smooth 格式的视频流插件,我们将很快开始对注入器进行大规模负载测试。
在以下方面有哪些推荐配置:
- 机器
- OS
- 系统调优
- Java
很难回答这样的问题,因为行为至少取决于这些因素:
- Stream 的类型:HLS 将比 MPEG-DASH 和 HSS 表现更好,由于 XML 格式 ,最新的 2 个 CPU 消耗更多
- Manifest 的持续时间,最大的是它需要更多的内存和解析它
- 刷新周期,越短越消耗内存CPU
所以最好的建议是根据您的清单进行校准。
关于您的问题的一些建议:
机器:
- 确保你有足够的带宽和网卡
- 使用 "average Manifest" ,使用 m5.2xlarge 类型的机器(8 vCPU / 16 到 32 Go)负载测试 700 到 1500 个线程(虚拟用户)应该没有问题
OS
- 我们建议您使用 Linux/MacOS 而不是 Windows OS,因为您将在相同的 virtual/physical 配置上获得更多线程。
- 但是使用 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
- 确保您使用 Java 8 或 9 的最后一个次要版本。
确保您使用 Java 64 位能够分配超过 1.5/ 2GB 的内存。通过 运行
检查java-版本
根据您的校准分配足够的堆,例如分配 6g 堆:
-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
您可以在此博客中阅读更多内容: