2012年9月20日木曜日

JBoss EAP6.0とEAP5.1.2の比較検証

こんにちは、JBoss テクニカルチームの 手塚 です。
まだまだ残暑が厳しいかと思いますが、皆様いかがお過ごしですか?

先日は敬老の日で祝日があり、3連休でした。祝日と言えば、今年は例年に比べ、1年間を通しての休日が少ないらしいですが、2006年にも同じ様に例年に比べて休日が少なかったのはご存知でしょうか。
2006年には、臨時祝日として「海苔の日」などを祝って臨時祝日としようとしたらしいですね。(臨時祝日になったのかは覚えていませんが・・・)

そんな脈絡もない前書きではありますが、今回からJBossテクニカルチームは色々な検証を行い、その結果をブログとして報告していこうと思います。さて、JBossテクニカルチームとして初の投稿となる今回は『JBoss EAPの機能改善検証』を行なっていこうと思います。

検証の目的

JBoss EAP6.0の元となったJBossAS7において、起動時間、メモリ使用量、メモリ管理、JMSの送受信が改善されたとのアナウンスがありました。(JBossASについての情報はこちらから)
今回アナウンスされた情報が、実際にどの程度改善されたのかEAP5.1.2とEAP6.0で比較検証を行い、結果をまとめて報告したいと思います。検証項目は以下の通りです。

  1. 起動時間
  2. 起動時メモリ使用量 
  3. メモリ管理 
  4. JMSの送受信計測 

検証環境

【ハードウェア】
CPU Intel Core i7-2600 64bit
メモリ DDR3 2GB*2
HDD SATA2 500GB 7200rpm

※ たまたま私の隣に配置されていたマシンを検証用マシンとして採用します。

【ソフトウェア】
OS RedHat Enterprise Linux 6.3 x86_64
JDK Oracle JDK 1.6.0 Update27
JMeter Apache JMeter 2.7

※ 各ソフトウェアはEAP5.1.2,EAP6.0で共通でサポートされているもののうち最新のものを選定。

検証項目1(起動時間)

本検証では、JBoss EAPが起動するまでの 起動時間 の検証を行ないます。

【方法】
10回起動し、その起動時間を測定しました。

【結果】
EAPバージョン 最大起動時間[s] 平均起動時間[s]
JBoss EAP 5.1.2 13.327 10.737
JBoss EAP 6.0 6.571 1.922

【考察】
EAP6.0は、EAP5.1.2に比べて、最大起動時間は約2倍早く起動し、平均起動時間は約10倍早く起動します。起動時間の高速化は、以下の 3つの効果 が大きいと考えられます。

  • サービスの並列起動
  • サービスの遅延ロード
  • インデックスの使用

実は最大起動時間はEAP5.1.2、EAP6.0共に1回目の起動時の数値です。EAP6.0は2回目以降の起動でインデックス化されたメタデータを使用して,定義情報全体の解析処理を回避するようになったことから、EAP6.0では、 「2回目以降で読み込むためのメタデータを1回目の起動時に生成しているのではないか(その為、初回は時間がかかる)」 と考えられます。とりあえず、最大起動時間も平均起動時間も前のバージョンより 格段に良くなっている ことが伺えます。

では次に、起動時の使用メモリについて見て行きます。

検証項目2 (起動時メモリ使用量)

本検証では、 起動時に使用するメモリ および起動に必要なHeapサイズ の検証を行ないます。

【方法】
10回起動し、その際の使用メモリを測定しました。

【結果】
EAPバージョン 最小限のヒープサイズ設定(※) 使用メモリ
JBoss EAP5.1.2 144MB 315MB
JBoss EAP6.0 15MB 129MB

※ 最小限のヒープサイズ設定は、JVMパラメータの"-Xms○ -Xmx○"の値を変更しエラーが発生せず起動するヒープサイズのもっとも小さな値の設定を調査します。

【考察】
EAP6.0はEAP5.1.2に比べて、最小限のヒープサイズ設定は、占有領域を約96%の減少が表れ、使用メモリは、24%の減少していることが分かります。この事から、EAP6.0の起動時の メモリ使用量 は、EAP5.1.2に比較して 非常に少なくて済む と言えそうですね。

次の検証項目は、サーブレットを作成し、JMeterを利用した検証です。

検証項目3 (メモリ管理)

EAP6.0では メモリ管理が改善されている ので、メモリを殆ど利用しないアプリケーションと、メモリを使用するアプリケーションを実際に作成して検証を行っていきましょう。

【方法】
負荷をかけEAP5.1とEAP6.0でレスポンスタイム、スループットを比較。アプリケーションは以下の2種類。

  • パターン 1  HelloWorldレベルのサーブレット
  • パターン 2  1Mのセッション変数を作成し削除するサーブレット

【結果】
まず、 『パターン1:HelloWorldレベルのサーブレット』 を用いてスループットとレスポンスタイムを比較していきましょう。

余談ですが、プログラミング言語の入門では殆どの場合、最初に作るプログラムは『"Hello,World!!"を出力する』ですよね。なぜ、HelloWorldを出力するのか、その一説にはC言語の技術書の影響だとされていますが、真相は謎の中です。意外と色々な方が調べていて情報公開を行っているので、気になる方は知らべてみると意外と面白いことが分かるかもしれませんね。

検証結果を下図、スループットAP1,レスポンスタイムAP1として示します。

AP1はスループット、レスポンスタイム共に負荷生成クライアントのCPUネックとなってサーバに負荷がかかりませんでした。AP1のスループット、レスポンスタイムの図の全体の傾向から、メモリを使わないアプリケーションでは、 性能に大きな違いはない と考えられます。

次に、 『パターン2:1Mのセッション変数を作成し削除するサーブレット』 を用いてスループットとレスポンスタイムの比較を行ないます。検証結果を下図、スループットAP2,レスポンスタイムAP2として示します。

スループット:EAP5.1.2はサーバCPUネックとなり低下

レスポンスタイム:EAP6.0はメモリ管理によりGCの停止が極力抑えられていた。

AP2のメモリ依存度の高いアプリの場合では、EAP6.0はEAP5.1.2よりパフォーマンスが良いことが分かります。

【考察】
本検証から メモリ依存度の高いアプリ の場合にはEAP6.0はEAP5.1.2より パフォーマンスが良い と考えられます。それでは、検証の最後の項目であるJMSの送受信計測を行っていきましょう。

検証項目4 (JMSの送受信計測)

JMSの送受信が改善された とのアナウンスを受けているので、JMSスタンドアローンアプリケーションを作成し、検証を行いましょう。

【方法】
データ(100byteと1M)を10回送受信し、送受信にかかる時間を測定する。

【結果 (送信時間)】

100byte
EAPバージョン 初回送信時間[ms] 平均送信時間[ms]
JBoss EAP5.1.2 908 651.2
JBoss EAP6.0 906 383.2
1Mbyte
EAPバージョン 初回送信時間[ms] 平均送信時間[ms]
JBoss EAP5.1.2 975 686.3
JBoss EAP6.0 962 400.0

【結果 (受信時間)】

100byte
EAPバージョン 初回送信時間[ms] 平均送信時間[ms]
JBoss EAP5.1.2 813 604.0
JBoss EAP6.0 430 375.6
1Mbyte
EAPバージョン 初回送信時間[ms] 平均送信時間[ms]
JBoss EAP5.1.2 728 620.4
JBoss EAP6.0 545 467.8

【考察】
初回送信時間にはあまり改善は見られません でしたが、平均送信時間、初回受信時間、平均受信時間には改善が見られます。EAP6.0とEAP5.1.2に比べて、20%~40%の送受信の速度の向上 が行われてることが分かりました。

検証のまとめ

  1. EAP6.0は、EAP5.1.2に比べて非常に速く起動する
  2. EAP6.0の起動時のメモリ使用量は、 EAP5.1.2に比較して非常に少なくて済む
  3. メモリ依存度の高いアプリの場合には、 EAP6.0はEAP5.1.2よりパフォーマンスが良い
  4. JMSアプリケーションにおいては、EAP6.0はEAP5.1.2に比べ20%~40%の送受信の速度の向上がみられた

以上、JBoss テクニカルチーム 手塚 でした。

0 件のコメント:

コメントを投稿