「10万クライアント環境に耐える高性能」、三菱UFJインフォメーションテクノロジーがWebSocketの性能検証で手応え──Oracle WebLogic Server 12c Forum 2014レポート

Oracle Java & Developers編集部
2014-03-03 11:00:00
  • このエントリーをはてなブックマークに追加

少ないリソース消費で安定して高速に動作──検証でわかったWebSocketの優位性

 ここからは、黒田氏が紹介した実際の検証結果を見ていこう。まずはOS情報のうち、CPUリソースについて確認する。その結果は次のようになる。

検証結果

 このグラフでは、横軸が同時接続クライアント数を、縦軸は、その際のCPU利用率を示している。グラフから、WebSocketによる実装では、他の2つの技術と比較して、どの段階でもCPU利用率が半分程度に収まっていることがわかる。また、グラフの振れ幅が示すように、WebSocketではCPU消費量が安定している。これは、WebSocketでは1つのリクエストを処理するコストが小さいことを表している。

 次のグラフは、WebSocketを使用した場合のCPU利用比率を示したものだ。

検証結果

 この結果から、クライアント数の増大によって通信処理が頻繁に発生するケースでは、ネットワーク・カードとのやり取りに起因するシステムCPU利用(systems)がユーザーCPU利用(usr)の3倍程度になることがわかる。これについて、黒田氏は「物理サーバであれば問題は少ないでしょうが、クラウドなどの仮想サーバ環境では、1万クライアント程度でも通信処理によるCPU負荷がかなり高まることに注意すべきです。systemsコールの回数制限が定められている場合もあるため、検討の必要があります」と説明する。

 次のグラフは、各テスト・プログラムでのLoad Average(処理待ちタスクの数)を比較したものだ。横軸は同時接続クライアント数を、縦軸はLoad Averageを示す。

検証結果

 このグラフから、特にCometでは、同時接続クライアント数が6万を超える辺りからLoad Averageが急増していることがわかる。そして、「ポーリング、Cometともに、利用コア数が8を超えた辺りで大幅なレスポンス遅延が生じ、検証不能となりました」と黒田氏は振り返る。一方のWebSocketは、Load Averageの増加はクライアント数の増加にきちんと比例して推移し、値も低く安定した挙動を示していることが確認できる。

 ネットワーク・リソースの消費量については、次のような結果となった。

検証結果

 ご覧のとおり、HTTPを使うCometはWebSocketの2~3倍程度の帯域幅を消費する結果となった。ポーリングによるネットワーク消費量は小さく見えるが、例えばリアルタイム性を倍に(ポーリング頻度を1.5秒に)設定すれば、ネットワーク消費量も倍の値となる。

 続いて、JVMについて見てみよう。次のグラフは、JVMリソースのOld領域におけるメモリ使用量を比較したものだ。

検証結果

 このグラフから、特にCometでは、クライアント数の増加に伴ってOld領域が不安定な状態になっていることが見て取れる。

 一方、次に示すのは、JVMにおけるyoungGCの回数を比較したものである。

検証結果

 この結果より、WebSocketではクライアント数の増加による影響が軽微なのに対し、ポーリングとCometでは、それぞれWebSocketの10倍以上のガベージ・コレクション(GC)が発生し、さらにクライアント数の増加に伴ってその回数が激増していることがわかる。

 そして次のグラフは、各プログラムの平均レスポンス・タイムを示したものである。

検証結果

 CometとWebSocketの比較では、Cometがクライアント数の増加に応じて遅延が指数的に増えているのに対して、WebSocketではクライアント数の増加にかかわらず、レスポンスに遅延のないことがわかる。ポーリングはその技術的な特性上、クライアント数にかかわらずレスポンス・タイムは常に一定(今回のテストでは3秒)となった。

【資料ダウンロード】

Oracle WebLogic Server 12c Forum 2014における三菱UFJインフォメーションテクノロジーの講演資料は、下記のリンク先よりダウンロードできます。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]