这篇文章阐述了如何在您的硬件环境下进行性能调优。
目录
概述
安装合适的操作系统
对Wowza Streaming Engine做性能调优
Linux环境下其它调优措施
Windows环境下其它调优措施
概述
从Wowza Streaming Engine™ 4.2.0版本开始,Wowza在安装包中就已经自带了一个版本为8.0的JRE,在安装Wowza Streaming Engine时,它会被自动安装,并被默认地调整到开发模式,你可以通过Java Setting的设置将其调整为产品模式(正式运行环境),如果你对Java性能调优很熟悉,你也可以在Wowza Streaming Engine 管理界面中手动调整各种细节参数。
注:从Wowza Streaming Engine™ 4.7.8版本开始,Wowza已经将JRE升级为9.0.4
安装合适的操作系统
首先,无论是Windows系统还是Linux系统,我们建议你尽量使用较新的操作系统版本。
其次,请使用64位操作系统。
最后,这台服务器上除了Wowza Streaming Engine外,尽量不要安装和运行其它无关的程序。
对Wowza Streaming Engine做性能调优
默认情况下,你可以用下面格式的URL,访问Wowza Streaming Engine Manager的管理界面:
http://[wowza-ip-address]:8088/enginemanager
在Wowza Streaming Engine Manager的管理界面中,点击页面顶部的Server菜单,然后在左侧导航菜单选择Performance Tuning,在Performance Tuning显示了服务器的操作系统,可用的内存,处理器的核心数量,以及Java版本和架构。
Java Settings
在左侧导航菜单点击Java Settings。这个Java Settings界面展现了当前的Java 设置,包括Java Heap Size,这是分配给Wowza Streaming Engine的内存,以及Java Garbage Collection Settings.
要改变这些设置,点击Edit。
Java Heap Size有三个可选参数,默认参数是Development level。如果是在一个独占的正式运行环境,请为其选择Production level,然后点击Save。
当然,你也可以根据需要选择Custom level,然后自己设置一个值。
但是,注意: 目前Wowza的管理界面上对Custom level设置了一个不合理的限制,即最大只能是10GB,如果你要设置更大的Java Heap size,请在Wowza安装目录下conf/tune.xml文件中修改。
另外,JAVA垃圾回收器默认采用G1,这个通常不用做任何调整。当然,如果你非常精通它,你可以试着调整看看。
最后,重启Wowza Streaming Engine,让这些修改生效。
Server Thread Pools
在左侧导航菜单点击Server Thread Pools。 Server Thread Pools界面展现了当前的Handler Thread Pool Size 和 Transport Thread Pool Size。
要改变这些设置,请点击Edit。如果这些设置保留在Set automatically,那么Wowza Streaming Engine 会自己计算Handler Thread Pool Size 和 Transport Thread Pool Size ,计算方式如下:
Handler Thread Pool Size = 60 x Processor Cores
Transport Thread Pool Size = 40 x Processor Cores
Transport Thread Pool Size = 40 x Processor Cores
但是,注意:Wowza在按上面的公式自动计算Handler Thread Pool Size 和 Transport Thread Pool Size的值时,它假定了你的服务器CPU核数不超过10核(至于为什么要这么假设,可能有其它原因),也就是说超过10核以上,它并没有按上面的 参数设置,所以这时你必须手工修改Server.xml文件来调整性能参数。
此外,在Wowza Streaming Engine Manager的管理界面上设置Handler Thread Pool Size 和 Transport Thread Pool Size时,它们最大不能超过1024。但这只是管理界面上的 限制。你完全可以编辑Server.xml文件来修改它们的值。
注意: Processor Cores 的值显示在Performance Tuning主界面上,如下图所示。
Virtual Host Processors
点击左侧导航菜单的Virtual Host Processors。 在Virtual Host Processors界面展现了在VHost层面处理不同类型的链接的线程数量。
要改变这些设置,请点击Edit。当将其保留在Set automatically时,Wowza Streaming Engine将按照如下规则自己计算这个值:
Net Connections Processor Count = 2 x Processor Cores
Media Caster Processor Count = 2 x Processor Cores
Idle Worker Count = 2 x Processor Cores
Unicast Incoming Processor Count = 2 x Processor Cores
Unicast Outgoing Processor Count = 2 x Processor Cores
Multicast Incoming Processor Count = 2 x Processor Cores
Multicast Outgoing Processor Count = 2 x Processor Cores
Media Caster Processor Count = 2 x Processor Cores
Idle Worker Count = 2 x Processor Cores
Unicast Incoming Processor Count = 2 x Processor Cores
Unicast Outgoing Processor Count = 2 x Processor Cores
Multicast Incoming Processor Count = 2 x Processor Cores
Multicast Outgoing Processor Count = 2 x Processor Cores
Virtual Host Ports
Virtual Host Ports 界面展现了当前Wowza使用的端口,以及分配给每一个端口的处理线程数量。
要改变这些设置,请点击Edit。若将设置保留为Set automatically,那么Wowza Streaming Engine 将按如下方式自己计算线程数量:
Port 1935 Processor Count = 2 x Processor Cores
Port 8086 Processor Count = 2 x Processor Cores
Port 8086 Processor Count = 2 x Processor Cores
Wowza上的一些其它设置
-
对上图中的Client Idle Frequency和RTP Idle Frequency做一个说明,如下:
Client Idle Frequency是一个单位为毫秒的时长,Adobe Flash 播放器RTMP连接的idle时长(我理解是一个超时时长)。 对于最基本的VOD点播来说,250毫秒可以提供稳定且性能不错的效果。对于低延时的直播业务来说125到250毫秒是合适的。 如果你对低延时不是特别在意(更在意稳定性),Client Idle Frequency可以调整到500,这样可以降低CPU占用率,使得系统可以支撑更多的客户端连接。 它的有效值是1到1000。
RTP Idle Frequency是一个单位为毫秒的时长,是RTP连接的idle时长(我理解是一个超时时长). 它的有效值是1到1000。
在非低延时流媒体场景下,并且你在客户端设置了3秒或更多的缓冲(NetStream.bufferTime), 你可以通过修改[install-dir]/conf/VHost.xml文件中以下两个数值来降低服务器上CPU的负担,以处理更多并发连接(sessions):
IdleWorkers/CheckFrequency: 100 Client/IdleFrequency: 500
-
如果你在Linux上遇到多路组播流输入时互相妨碍的问题时,你可能需要将Java属性java.net.preferIPv4Stack 设置为 true。如果要这么做, 请编辑[install-dir]/bin/setenv.sh文件,在清除第13行的注释屏蔽:
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
当你在向Adobe Flash 播放传送流媒体时,很重要的第一点是要尽可能的避免使用RTMPT (tunneling version of RTMP)。 RTMPT使用了轮询机制,它非常占用CPU资源。我们建议使用一个协议轮转策略,只在需要使用RTMPT时使用RTMPT。
-
对于低延时的聊天应用,最好使用较小的socket缓冲(读和写共16000 bytes)。socket缓冲大小设置在[install-dir]/conf/VHost.xml文件中:
<ReceiveBufferSize>16000</ReceiveBufferSize> <SendBufferSize>16000</SendBufferSize>
-
如果你把不准以上的socket缓冲大小究竟该设置为多少合适,那么最好设置为0:
<ReceiveBufferSize>0</ReceiveBufferSize> <SendBufferSize>0</SendBufferSize>
Linux环境下的一些其它的调优措施
1、Linux下内存占用问题
修改[wowza-install-location]/bin/setenv.sh文件,在文件最后增加两行:
export MALLOC_CHECK_=1 export MALLOC_ARENA_MAX=4
2、Linux下IO调度算法
在Linux上, 将I/O调度算法(elevator algorithm)调整到Anticipatory elevator (as) 。请参阅下面关于它的描述:
为Red Hat选择一种I/O调度算法
3、磁盘挂载问题
在Linux上, 挂载(mount)磁盘时采用noatime选项。这个操作在不同的Linux发行版上会有一些不同。 下面是一个关于这个设置的基本描述:
使用noatime属性
Windows环境下的一些其它的调优措施
在Windows 7, Server 2003 or 2008上, 最好关闭掉TCP auto tuning。这里有关于如何操作的信息:
How to disable Windows Vista TCP/IP auto-tuning