Hi,
I’m currently tuning performance of wowza 4.0.3, with following hardware and test situation, we can get about 8Gbps-9Gbps.
-
2*Intel® Xeon® CPU E5-2690 0 @ 2.90GHz(total 32 logic processors)
-
32G RAM
-
Only one vod file, H.264 encoded, 5Mbps, 1.57GBytes, located in {WowzaInstallDir}/content, which is a tmpfs directory by command “mount -t tmpfs -o size=2048m tmpfs {WowzaInstallDir}/content”
-
Clients use HLS to access VOD video
We start 1800 clients and Wowza works well, peformance of the machine is ok, command “top”’s output and VisualVM’s output are as following:
top - 08:50:47 up 10 days, 16:45, 9 users, load average: 8.21, 10.79, 10.98
Tasks: 596 total, 1 running, 595 sleeping, 0 stopped, 0 zombie
Cpu(s): 19.1%us, 7.5%sy, 0.0%ni, 71.8%id, 0.1%wa, 0.0%hi, 1.6%si, 0.0%st
Mem: 32918272k total, 26107320k used, 6810952k free, 187908k buffers
Swap: 68517872k total, 3006824k used, 65511048k free, 12386628k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4108 root 18 0 11.3g 9.7g 12m S 594.0 30.9 6032:28 java
4262 root 16 0 2443m 102m 2740 S 45.5 0.3 358:35.09 python
7597 root 16 0 2438m 87m 2740 S 43.8 0.3 354:20.58 python
But if we start 2000 client and Wowza can’t provide normal service, most of clients get timeout, top and VisualVM’s outputs are as following. And also from VisualVM, we can see that all ServerTransportThreads are busy.
top - 08:57:34 up 10 days, 16:52, 9 users, load average: 36.05, 25.62, 17.19
Tasks: 600 total, 1 running, 599 sleeping, 0 stopped, 0 zombie
Cpu(s): 23.1%us, 9.1%sy, 0.0%ni, 66.0%id, 0.1%wa, 0.0%hi, 1.8%si, 0.0%st
Mem: 32918272k total, 26271264k used, 6647008k free, 188248k buffers
Swap: 68517872k total, 3006824k used, 65511048k free, 12395196k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4108 root 18 0 11.3g 9.7g 12m S 724.9 30.9 6079:49 java
19783 root 16 0 2406m 62m 2740 S 48.4 0.2 1:29.96 python
7379 root 15 0 2368m 101m 2740 S 44.1 0.3 342:09.06 python
7073 root 16 0 2362m 87m 2740 S 40.8 0.3 356:30.99 python
It looks like the performance bottleneck is the function DirectRandomAccessReader.read() and seek() in ServerTransportThread, but we have using tmpfs to store the vod file, do you have any good suggest for us to overcome the bottleneck?
Thanks