Wowza Streaming Engineの最適なパフォーマンスチューニング
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wowza Streaming Engineのパフォーマンスチューニングにアクセスする
Wowza Streaming Engine Manager で、ページ上部のServerタブをクリックし、コンテンツパネル内のPerformance Tuning をクリックします。
Performance Tuning ページには、サーバーのOSアーキテクチャ、Wowza Streaming Engine が利用可能なメモリー量、システムのコアプロセッサー数、使用中のJava バージョンとアーキテクチャ(ビットネス)などが表示されます。
また、contents パネルからは、Java 設定、サーバー・スレッドプール、バーチャルホストなど、多数のパフォーマンスチューニングオプションにアクセスすることができます。
> Java 設定を調整する
デフォルトでは、Wowza Streaming Engine 4.2.0(およびそれ以降)は、サポートされるバージョンのJavaとともにインストールされ、実行するハードウェアに最適化された開発状態にチューニングされています。サーバーは、Javaの設定を調整することにより、本番レベルにチューニングすることができます。サーバーが最高の状態で動作していることを知ることで、Wowza Streaming Engine は簡単に本番環境に導入することができます。上級ユーザーは、必要に応じて、さらにチューニングを変更することができます。
⚠ 注意:Wowza Streaming Engine 4.1.2以前をお使いの場合、最新のOracle Java Development Kit
(JDK)を実行すると、最良の結果を得ることができます。最良の選択肢は、2GB以上のJavaヒープ
サイズを可能にする64-bit Java VMを備えた64-bit OSを実行することです。詳細は、Manually install
and troubleshoot Java on Wowza Streaming Engineをご参照ください。
① contents パネルの Java Settings をクリックします。
Java Settings には、Wowza Streaming Engineに割り当てられたメモリ量であるJava Heap Size や、Java Garbage Collection Settings など、現在のJava 設定が表示されます。
② これらの設定を変更するには、Edit をクリックし、次のいずれかの設定を変更した後に Save をクリックします。
Java Heap Size
Java Heap SizeのデフォルトはDevelopmentレベルです。本番環境で専用サーバーを実行するには、Java Heap Size の設定を Production レベルに変更します。
サーバーでメモリを大量に消費する他のサービスを実行している場合や、サーバーの実行中に OutOfMemory エラーが発生する場合は、Java Heap Size の設定を Custom level に変更して、特定の値を入力することができます。64 ビット版の Java VM を実行しており、コンピュータに 4 GB 以上の RAM がある場合は、Java heap size を 3000 MB から 5000 MB の間に設定します。16 GB 以上の RAM を搭載している場合は、heap size を 8000 MB に設定します。Wowza Streaming Engine Manager では、最大100000MBを指定することができ、ほとんどのストリーミングニーズに十分対応できるはずです。
Java Garbage Collection Settings
JavaにおけるGC(Garbage Collection)のチューニングは厄介です。あるサーバーのセットアップで最適なものが、別のサーバーではうまくいかないことがあります。試行錯誤とお客様からのフィードバックにより、いくつかのアプローチを推奨しています。
G1 (Garbage First) collector:デフォルトチューニングの G1 (Garbage First) collector を使用することをお勧めします。これは多くのストリーミング状況でうまく機能し、変更の必要はありません。G1コレクターは、一時停止時間が短く、高スループットのアプリケーション向けに設計されています。これは、大きなメモリを持つマルチプロセッサ・コンピュータを対象としたサーバー型ガベージコレクタで、Oracle JDK 7 Update 4およびそれ以降のリリースで完全にサポートされています。
⚠ 注意:G1 collector の一時停止時間は、Custom collector settings で調整することができます。以
下は、カスタム設定の推奨例です。
-XX:+UseG1GC -XX:MaxGCPauseMillis=100
NUMA-aware allocator (Custom collector settings) :NUMA-aware allocator は、低レイテンシメモリの使用を増やすことにより、非一様メモリアーキテクチャ(NUMA)を持つコンピュータ上のアプリケーションのパフォーマンスを最適化します。これは通常、複数の物理 CPU ソケットを持つコンピューターです。デフォルトでは、このオプションは無効になっており、NUMAに対する最適化は行われません。このオプションは、parallel garbage collector が使用されている場合(-XX:+UseParallelGC)にのみ使用できます。
例えば、マルチCPUソケットのシステムでNUMA最適化を有効にするには、Custom collector settingsに次のように入力します。
-XX:+UseParallelGC -XX:+UseNUMA
Monitor GC pause times
GCの一時停止時間をモニタリングするには、テキストエディタで [install-dir]/conf/Tune.xml を開き、次の <VMOption> プロパティを追加します。
For Linux and macOS:
<VMOptions>
<VMOption>-server</VMOption>
<VMOption>-Djava.net.preferIPv4Stack=true</VMOption>
<VMOption>-Xlog:gc*,gc+heap=trace,safepoint*:file=${com.wowza.wms.AppHome}/logs/gc_${com.wowza.wms.StartupDateTime}.log:time,level,tags</VMOption>
</VMOptions>
For Windows:
<VMOptions>
<VMOption>-server</VMOption>
<VMOption>-Djava.net.preferIPv4Stack=true</VMOption>
<VMOption>-Xlog:gc*,gc+heap=trace,safepoint*:file="\"${com.wowza.wms.AppHome}/logs/gc_${com.wowza.wms.StartupDateTime}.log\"":time,level,tags</VMOption>
</VMOptions>
その後、Wowza Streaming Engineを再起動し、変更を適用してください。
⚠ 注意:Windowsでは、このプロパティはデバッグ用のログファイルを作成するので、実行したまま
にしないでください。gc_${com.wowza.wms.StartupDateTime}.log ファイルは、サービスモード
で Wowza Streaming Engineを起動する場合、またはコマンドラインを使用する場合のみ作成され
ます。
> Server Thread Poolsを調整する
contents パネルの 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
⚠ 注意:Processor Cores の値は、Performance Tuning ページに表示されます。
> Media Cacheを調整する
contents パネルの Media Cache Tuning をクリックします。Media Cache Tuning の設定は、VOD Edgeアプリケーションに適用されます。この設定には、現在の Writer Thread Pool、Readahead Thread Pool、Max Pending Write Request Size、および Max Pending Readahead Request Size が含まれます。
これらの設定を変更するには、Edit をクリックします。Set automatically のままだと、Wowza Streaming Engineは Writer Thread Pool と Readahead Thread Poolを以下のように計算します。
Writer Thread Pool = 2 x Processor Cores
Readahead Thread Pool = 1 x Processor Cores
Maximum Pending Write Request Size とMaximum Pending Readahead Request Size は、Java Heap Size に基づいて計算されます。
Java Heap Size | 1200 MB to 3999 MB | 4000 MB to 7999 MB | 8000 MB or greater |
Maximum Pending Write Request Size | 160 MB | 500 MB | 1000 MB |
Maximum Pending Readahead Request Size | 80 MB | 250 MB | 500 MB |
> Virtual Host Processorsを調整する
contents パネルの Virtual Host Processors をクリックします。Virtual Host Processors ページには、様々なタイプの接続を処理するために VHost レベルで使用されるスレッドの数が表示されます。
設定を変更する場合は、Edit をクリックします。Set automatically のままだと、Wowza Streaming Engineは以下のように値を計算します。
Net Connections Processor Count = 4 x Processor Cores
Media Caster Processor Count = 4 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
⚠ 注意:Net Connections Processor Count および Media Caster Processor Count について
プロセッサコア数×4の積が6以下の場合は6、32以上の場合は32と表示されます。
Idle Worker Count, Unicast Incoming Processor Count、Unicast Outgoing Processor Count、
Multicast Incoming Processor Count、と Multicast Outgoing Processor Count について
プロセッサコア数×2の積が4以下の場合は4、24以上の場合は24が表示されます。
Client Idle Frequency は、Adobe Flash クライアント接続のアイドルイベント間の時間(ミリ秒単位)です。基本的なオンデマンドストリーミングの場合、250ミリ秒が最も信頼性とパフォーマンスの比率が高くなります。ライブで低遅延のストリーミングを行う場合は、125〜250ミリ秒が適しています。低遅延ストリーミングを行わない場合は、Client Idle Frequency を500に増やすと、CPU使用率が低下し、より多くの同時接続が可能になります。1から1000の値がサポートされています。
RTP Idle Frequency 値は、RTP 接続のアイドルイベント間の時間(ミリ秒単位)です。1から1000の値がサポートされています。
> Virtual Host Portsを調整する
Virtual Host Ports ページには、現在開いているポートと各ポートに関連するプロセッサー数が表示されます。
設定を変更する場合は、Edit をクリックします。Set automatically のままだと、Wowza Streaming Engine はデフォルトのプロセッサーカウントを以下のように設定します。
Port 1935 Processor Count = 2 x Processor Cores
Port 8086 Processor Count = 2 x Processor Cores
> Virtual Host Thread Poolsを調整する
contents パネル内の Virtual Host Thread Pools をクリックします。Virtual Host Thread Pools は、サーバ上で複数のバーチャルホスト (VHost) を動作させる場合に必要です。
複数のバーチャルホストを起動している場合、Handler Thread Pool Size と Transport Thread Pool Size は Use Server Settings に設定してください。Use Server Settings に設定された場合、ハンドラとトランスポートのスレッドはサーバ上で動作している全てのアクティブな VHost に等しく分けられます。
* チューニングオプションの追加
> Transcoder Memory 使用量を最適化する(Linuxのみ)
Wowza Streaming Engineを使用してトランスコードを実行すると、メモリの使用率が予想以上に高くなることがあります。特定の状況下では、これはメモリ不足の問題を引き起こし、サーバーが落ちる原因になる可能性があります。これが発生する最も一般的な理由は、ストリームの複数回の公開/非公開、たとえば、WebRTCのストリーミング中に頻繁に公開/非公開を行う場合です。
メモリの過剰使用を防ぐために、MALLOC_ARENA_MAX パラメータを設定して、CPU コアごとに許可されるアリーナ数を制限します。デフォルトでは、これは 8 x Processor Cores に設定されています。アリーナ数を制限すると、パフォーマンスに影響を与える可能性があります。CPU コアごとに許可されるアリーナ数を 4 x Processor Cores に制限することから始めて、必要に応じてさらに制限することをお勧めします。
例えば、
8つの Processor Cores を持つサーバーの場合、CPUコアごとに許可されるアリーナ数を32(4×8)に
制限することから始めます。
export MALLOC_ARENA_MAX=32
それでもメモリ使用率が高い場合は、メモリの過剰使用を防ぐまで、アリーナ数をさらに制限してく
ださい。
export MALLOC_ARENA_MAX=4
⚠ 注意:MALLOC_ARENA_MAXは1まで設定可能ですが、パフォーマンスに影響が出る可能性があり
ます。
上記の例のように、[install-dir]/bin/ にあるsetenv.sh ファイルの末尾に、パラメータを追加してください。変更を保存した後、Wowza Streaming Engineを再起動してください。
> Transcoder performanceを最適化する
Wowza Streaming Engineを実行しているデプロイ済みサーバーが適切にチューニングされていることを確認することに加え、トランスコーダーのパフォーマンスを最適化するために、以下のガイダンスを参照してください。
・利用可能なサーバーからクライアントへの帯域幅を決定します。ターゲットビットレートを上げると品質が上がります。この種の変更を行う場合、クライアントは高いビットレートのストリームを再生するために十分な帯域幅を利用できる必要があることに留意してください。
・ハードウェアアクセラレーションは、トランスコーディングに推奨されますが、必須ではありません。Wowza Streaming Engineが使用しているハードウェアアクセラレーションリソースについては、Verify how Transcoder is running in Wowza Streaming Engine を参照してください。
・Wowza Streaming Engine Transcoderのパフォーマンスベンチマーク 記事にあるソフトウェア(デフォルト)エンコーディング、Intel Quick Syncアクセラレーションエンコーディング、NVIDIA NVENCアクセラレーションエンコーディングのパフォーマンスベンチマーク数値をトランスコーディングのパフォーマンスを推定するガイドラインとして使用してください。
⚠ 注意:1つのテンプレートに複数のエンコードプリセットがあっても、複数のテンプレートがあって
も、同じ数の受信ライブストリームと同じ数のエンコードされた出力レンディションがあれば、性
能に影響を与えません。
> 低レイテンシーのチャットアプリケーションに最適化する
低遅延のチャットアプリケーションでは、より小さなソケットバッファサイズ(読み取りと書き込みで16000バイト)を使用します。ソケットバッファサイズは、[install-dir]/conf/VHost.xml の<NetConnections>/<SocketConfiguration>プロパティで設定されます。
<ReceiveBufferSize>16000</ReceiveBufferSize>
<SendBufferSize>16000</SendBufferSize>
Wowza Streaming Engine Managerでこれらのプロパティを調整するには、
① ページ上部にある Server タブをクリックします。
② Server の contents パネルで、Virtual Host Setup をクリックします。
③ Virtual Host Setup ページの Properties タブで、Quick Links バーの Net Connctions をクリック
します。
⚠ 注意:Properties タブへのアクセスは、高度な権限を持つ管理者に限定されています。詳細につい
ては、資格情報の管理 を参照してください。
④ Net Connectionsのプロパティ領域で Edit をクリック、receiveBufferSize とsendBufferSize
のプロパティ値を調整し、Save をクリックします。
⑤ 変更を適用するよう促されたら、バーチャルホストを再起動します。
> ネットワークソケットのパフォーマンスを最適化する
ネットワークソケットのパフォーマンスを最適化するために、受信と送信のソケットバッファサイズを0
に設定します。ソケットバッファサイズは、[install-dir]/conf/VHost.xml の<NetConnections>/<Socket
Configuration>プロパティで設定されます。
ReceiveBufferSize>0</ReceiveBufferSize>
<SendBufferSize>0</SendBufferSize>
Wowza Streaming Engine Managerでこれらのプロパティを調整するには、
① ページ上部にある Server タブをクリックします。
② Server の contents パネルで、Virtual Host Setup をクリックします。
③ Virtual Host Setup ページの Properties タブで、Quick Links バーの Net Connctions をクリック
します。
⚠ 注意:Properties タブへのアクセスは、高度な権限を持つ管理者に限定されています。詳細につい
ては、資格情報の管理 を参照してください。
④ Net Connectionsのプロパティ領域で Edit をクリック、receiveBufferSize とsendBufferSize
のプロパティ値を調整し、Save をクリックします。
⑤ 変更を適用するよう促されたら、バーチャルホストを再起動します。
> CPUリソースベースのチューニング
サーバーで利用可能なCPUリソースに基づいてWowza Streaming Engineをチューニングするには、以下のガイドラインを使用してください。
total-core-count は、サーバーのCPUコアの総数を指します。例えば、デュアル・クアッドコア・プロセッサー(2つのクアッドコアプロセッサー)を使用している場合、total-core-count は8となります。
サーバーがハイパースレッディング(hyper-threading)をサポートしている場合は、スレッド数の合計を使用します。たとえば、デュアル・クアッドコア・プロセッサを搭載したシステムでハイパースレッディングが利用可能な場合、スレッドの合計数は下記の通りです。
2 processors x 4 cores x 2 threads per core = 16
物理プロセッサあたりのコア数とスレッド数は継続的に増加しているため、以下の各値の最大スレッド数を提案し、設定ファイルである [install-dir]/conf/VHost.xml で設定できるようにしています。
HostPort/ProcessorCount – 2 x [total-core-count] (maximum of 32)
IdleWorkers/WorkerCount – 2 x [total-core-count] (maximum of 32)
NetConnections/ProcessorCount – 2 x [total-core-count] (maximum of 32)
RTP/UnicastIncoming/ProcessorCount – [total-core-count] (maximum of 12)
RTP/UnicastOutgoing/ProcessorCount – 2 x [total-core-count] (maximum of 24)
RTP/MulticastIncoming/ProcessorCount – [total-core-count] (maximum of 12)
RTP/MulticastOutgoing/ProcessorCount – [total-core-count] (maximum of 12)
HandlerThreadPool/PoolSize – (60 x [total-core-count]) (maximum of 750)
TransportThreadPool/PoolSize – (40 x [total-core-count]) (maximum of 500)
⚠ 注意:Admin HostPort (/Port "8086")の HostPort ProcessorCount フィールドは変更しないでくださ
い。
これらの設定計算は、コアあたり少なくとも1GBのメモリがあること、または4つ以上のコアの合計がある場合、64ビットのJava VMを実行していること、および上記の推奨メモリ設定を使用していることを前提にしています。
> 複数のバーチャルホストに対応するチューニング
複数のバーチャルホスト (VHost) を動かしている場合、リソースの割り当てを各 VHost 間で分散させる必要があります。複数の VHost を実行する最も簡単な方法は、「CPU リソースベースのチューニング」に記載されている、単一の VHost を対象とした設定を分割し、システム上の各 VHost にリソースを分散させることです。設定は均等に分割する必要はありませんが、合計が単一の VHost 用に設定した場合の配分と同じになるようにします。もし、VHost のひとつがほとんどアイドル状態であれば、合計よりも多くのメモリを割り当てることができます。過剰な割り当ては危険ですので、この設定には注意してください。両方の VHost が結合された利用可能なリソースを超えた場合、out-of-memory エラーが発生します。
また、[install-dir]/conf/VHost.xml で、各 VHost/HandlerThreadPool/PoolSize と VHost/TransportThreadPool/PoolSize プロパティを 0 に設定すると、これらのプロパティに対して [install-dir]/conf/Server.xml 設定が代わりに使用されるようにもできます。これにより、Wowza Streaming Engineは全てのVHostでプールサイズを管理するように指示されます。
[install-dir]/conf/VHost.xml ファイルでは、アイドル/最小使用のVHostにはPoolSizeプロパティを0に設定し、より高いリソース要件を持つビジー/ハイパフォーマンスVHostには高い値を使用するという混合アプローチも使用することが可能です。
> アイドル・クライアント・システムの確認を調整する
低遅延ストリーミングを行っておらず、クライアント側のバッファが3秒以上ある場合(NetStream.buff
erTime)、[install-dir]/conf/VHost.xml の以下の値を変更することによって、サーバのCPU負荷を軽減
し、より同時セッションを処理することができます。
IdleWorkers/CheckFrequency – 50
Client/IdleFrequency – 250
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
日本デジタル・プロセシング・システムズ株式会社 東京都新宿区新宿2丁目5−12 FORECAST新宿AVENUE 6F東京都港区新橋 6-19-13 1F TEL(代): 03-6746-0231 |
|
Copyright © 2021, Digital Processing Systems Japan K.K. All rights reserved. |