多协议、性能稳定、丰富API的流媒体服务器软件
Wowza Stream Engine 4 的性能调优
注意:Wowza Stream Engine 4安装后默认的配置足可以满足开发级性能要求,但远不能满足产品级性能要求!

这篇文章阐述了如何在您的硬件环境下进行性能调优。

目录


概述
安装合适的操作系统
对Wowza Streaming Engine做性能调优
Java settings
Thread pools
Virtual host processors
Virtual host ports
Wowza上的一些其它设置
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版本和架构。

wowza

Java Settings



在左侧导航菜单点击Java Settings。这个Java Settings界面展现了当前的Java 设置,包括Java Heap Size,这是分配给Wowza Streaming Engine的内存,以及Java Garbage Collection Settings.

Wowza

要改变这些设置,点击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 PoolsServer Thread Pools界面展现了当前的Handler Thread Pool SizeTransport Thread Pool Size

wowza

要改变这些设置,请点击Edit。如果这些设置保留在Set automatically,那么Wowza Streaming Engine 会自己计算Handler Thread Pool SizeTransport Thread Pool Size ,计算方式如下:

Handler Thread Pool Size = 60 x Processor Cores

Transport Thread Pool Size = 40 x Processor Cores

但是,注意:Wowza在按上面的公式自动计算Handler Thread Pool SizeTransport Thread Pool Size的值时,它假定了你的服务器CPU核数不超过10核(至于为什么要这么假设,可能有其它原因),也就是说超过10核以上,它并没有按上面的 参数设置,所以这时你必须手工修改Server.xml文件来调整性能参数。

此外,在Wowza Streaming Engine Manager的管理界面上设置Handler Thread Pool SizeTransport Thread Pool Size时,它们最大不能超过1024。但这只是管理界面上的 限制。你完全可以编辑Server.xml文件来修改它们的值。

注意: Processor Cores 的值显示在Performance Tuning主界面上,如下图所示。 wowza

Virtual Host Processors



点击左侧导航菜单的Virtual Host Processors。 在Virtual Host Processors界面展现了在VHost层面处理不同类型的链接的线程数量。

wowza

要改变这些设置,请点击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

Virtual Host Ports



Virtual Host Ports 界面展现了当前Wowza使用的端口,以及分配给每一个端口的处理线程数量。

Wowza

要改变这些设置,请点击Edit。若将设置保留为Set automatically,那么Wowza Streaming Engine 将按如下方式自己计算线程数量:

Port 1935 Processor Count = 2 x Processor Cores

Port 8086 Processor Count = 2 x Processor Cores


Wowza上的一些其它设置



  • wowza


    对上图中的Client Idle FrequencyRTP 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