Raspberry PiでApache Tomcat - JavaのWebアプリを動かす(2)

Raspberr Pi

Raspberry Pi ( 以下 rpi ) 上で JavaのWebアプリケーションを動かすためのHowto - その2 です。アイコン認証Webサービスを実際に動作させています。

今回やること

Raspberry PiでJavaのWebアプリを動かす で、Tomcat をインストールして、サンプルWebアプリの実行までは確認できたわけですが、これだけではあまり面白くありません。

実際に実用的なWebアプリケーションをデプロイして動作を確認してみます。
ここでは弊社の アイコン認証Webサービス、及び、管理アプリケーション。更に、デモ用Webアプリケーション ( アイコン認証Webサービスを利用するWebアプリのサンプル) も載せて実行できるかどうかを検証してみます。

アイコン認証Webサービスはデータ保存にRDBも利用しているので、MySQLもインストールしてみます。

アイコン認証Webサービスのインストール・設定

  1. MySQLのインストール

    前回、rpi 上でのTomcat 起動まで確認できています。

    アイコン認証Webサービスを動作させるためには、データベースサーバが必要になるので、これもrpi上にインストールします。利用するDBはMySQLとします。

    $ sudo apt-get mysql-server
    

  2. 初期データの作成

    アイコン認証サーバ用の初期データをMySQLに投入します。投入は開発ツールか、初期データ用のSQLスクリプトファイルを利用します。

  3. アイコン認証Webサービスのインストール
    アイコン認証Webサービスはwarをデプロイしてインストールするのが最も簡単です。
    今回は以下のwarを展開しました。
    • IconAuth.war (Webサービス)
    • IconAuthAdmin.war (管理用アプリケーション)
    • IconAuthDemo.war (デモサイト)
    これら war ファイルを rpi に転送し、Tomcat の webapp ディレクトリ下にコピーします。
    Tomcatが実行中であれば、自動的に展開されます。
  4. アプリケーションの設定
    アプリケーションが展開されたら、各種設定を行います。
    設定ファイルはそれぞれのアプリケーションのWEB-INF/classes 以下に存在するので、このファイルを環境に併せて設定します。(詳細は割愛します)
  5. Tomcat再起動
    アイコン認証システム 管理アプリケーション
    拡大
    アイコン認証システム 管理アプリケーション
    Tomat を再起動します。設定や初期データのインストールに問題がなければ、Tomcat上でアイコン認証サービスが起動します。

    これだけだと、弊社の製品が動いたってだけで、全然面白くないと思うので、どの程度のパフォーマンスがあるかを比較してみます。

パフォーマンス比較

比較対象

パフォーマンスの比較対象は通常のPCサーバとします。
弊社内では社内システムのサーバ群は一部を除き全て仮想化してあり、JavaのWebアプリケーションの動作確認を行うサーバも仮想サーバとして構築されています。
今回のrpiとの比較対象はこのサーバ上で動作するアイコン認証Webサービスとします。
サーバスペックの概要は以下になります。

ハードウェアHP ProLiant ML110 G7
物理メモリ計:10GB
※アキバの○フマ△プで\9800で格安ゲットしたサーバ。店頭にあった最後の1台を購入し抱えて帰ってきた。重かった。メモリのみ追加して使用中。
OSCentOS 6.5
仮想化技術KVM
メモリ512MB
※GPUに割り当ててあるメモリ分、rpiの方が若干少なくなります(今回の計測では16MB分)。
CPU割り当て2
仮想化していない物理サーバに比べると、パフォーマンスは落ちると思いますが、開発・テスト用のWebアプリケーションサーバとしてはまずまずな性能を持っていると思います。

計測方法

パフォーマンスの計測は Apache JMeter を利用して行います。
Java開発者にとってはなじみのあるパフォーマンス計測用のツールです ( 多分 )。

計測は開発用に利用しているWindows PCからLAN経由でHTTPリクエストを送信し、応答時間を計測します。

テスト計画の作成

Apache JMeterではパフォーマンス計測を行うための処理手順をリクエスト計画として作成します。
Apache JMeterでは、計測を行うための処理(JMeterではサンプラーと呼んでいる)もHTTPリクエストだけでなく、FTPやLDAPのリクエスト等様々な処理を記述する事が可能です。

JMeter テスト計画
拡大
JMeter テスト計画

今回作成したテスト計画のポイントは以下になります。

  • 複数台のPCからのリクエストをエミュレーションする
    複数スレッドでループを回す事で、複数台のPCから多数のリクエストが送信されている状態をエミュレーションできます。
    同じテスト計画を同時に複数のPCから実行する事で、より実際のテストに近い形にできますが、今回は複数のプラットフォーム間でのパフォーマンス比較ができればいいので、一台のPCからテストする形で行っています。
  • リクエスト先(ホスト名)を変更できるようにする
    個々のHTTPリクエストに関しては"サーバ名またはIP"を設定せずに、HTTPリクエスト初期値設定にてこれら値を設定しておくことで、この部分の編集するだけでリクエスト先を一括して変更する事が可能です。
  • レスポンスが正しく返ってきているか確認できるようにする
    HTTPリクエストの応答をファイルへ保存する事で、リクエスト結果が正しいか検証する事ができるようにします。
    一旦結果が正しい事が判ったら、保存するエレメントは無効化できます。

テストの実施

テストを実施します。
テスト計画を作成したら、実行します。今回はスレッドグループで スレッド数=10、ループコントローラでループ回数=100でテストを実行する事にします。ループコントローラ下には4つのHTTPリクエストがあるので、一度のテスト実行で4*100*10=4000リクエストが発行されます。

実行結果は、各種リスナーエレメント ( グラフ表示、結果を表で表示、統計レポート ) で確認します。

5回行った結果の最上位と最下位を除外したものを示します。

テスト結果

KVMゲスト

AverageMedian90%LineMinMaxThroughputKB/sec
3330604175266.33245.0
2522463166338.54124.5
2219422126376.04582.0

rpi

AverageMedian90%LineMinMaxThroughputKB/sec
1309132223713127277.692.7
1292129923514126147.692.6
1309132423413333357.692.7

予想通りといえば、予想通りですが、仮想化サーバよりも相当遅いです ( スループット比で2.3%のパフォーマンスしかありません )。
とはいえ、スループットが7前後=1秒に7リクエストさばいているという事なので、個人向けや中小企業や部署内の省電力サーバ等でパフォーマンス要件が厳しくないのであれば使い道はあるかもしれません。

※社内で構築したrpiのアイコン認証サーバはデモ用途で使おうかと思ってたりします。
製品のお問合せを頂くと、実物が見れるかもしれません。