連載:Java「仮想化」開発環境を検証(2)

Java仮想化開発環境を構築


スティルハウス
吉川和巳
2005/10/14



ポータブルなJava開発環境を実現する

 開発環境の仮想化がもたらすメリットの1つは、物理的なマシンに依存しない「ポータブルな開発環境」を実現できる点です。VMwareの仮想マシンの実体はメモリやディスク内容を保存したファイル(図6)なので、仮想マシンの移動もごく簡単です。

図6 仮想マシンを構成するファイル群

 これらのファイルのサイズは、仮想マシン内で使用するディスク容量に比例します。よって大規模なソフトウェアやデータをインストールしない限り、数GBytesの大きさに収めることができます。そこで例えば、ApacheやJDK、JBoss、PostgreSQLなど一連のソフトウェアをインストールした仮想マシンを「リファレンス環境」とし、同マシンをファイル・サーバやDVD-Rにコピーして開発者やテスターに配布します。これにより、各開発者によるインストール作業で生じるつまらないミスや差異を防ぐことができ、チーム全員が同じの開発環境でただちに作業を始められます。またテスターがアプリケーションのバグを発見したとき、テスターは自分が使用している仮想マシン全体を開発者に提供できます。よって開発者側ではバグが発生する環境を再現する手間がかかりません。

 またプロジェクトの終了後、次期フェイズやサポート用に開発環境を残しておきたい場合は、仮想マシンのファイル一式をディスク上に保存しておくだけで済みます。カットオーバー後は仮想マシンのパフォーマンスも少なくて済むので、古いサーバ上に仮想マシンを移動してもよいでしょう。その逆に、プロジェクト途中で開発環境のパワーが不足したときは、新しいサーバ上に仮想マシンを移動するだけでパフォーマンスが向上します。実行環境を最初からインストールし直す作業は不要です。

仮想マシンのパフォーマンスを考える

 このように開発者にとってはとても便利なサーバ仮想化ですが、個々の仮想マシンが十分なパフォーマンスを出せなければ使い物になりません。では実際のところ、仮想マシンではどの程度のパフォーマンスが得られるのでしょうか。

 筆者の開発環境におけるサーバ仮想化では、3.4GHz動作のPentium 4プロセッサと2GBメモリを搭載したPCを購入し、ヴイエムウェアの仮想化ソフトウェアVMware Workstation 5(以降、VMware)を導入、これにより4台の仮想マシンのコンソリデーションが可能になりました。

 VMwareでは、1台の物理マシン上で構成できる仮想マシンの台数にとくに制限はありません。ディスクの容量さえ許せば、無制限に仮想マシンを用意できます。とはいえ、それらをすべて同時に運用できるわけではありません。実際には、ある程度の台数を超えると、各仮想マシンがいずれもアイドル状態なのに物理マシンの負荷が上昇するという現象が発生します(おそらくはゲストOSのコンテキスト・スイッチが負担となるのでしょう)。よって「同時運用可能な台数の上限」がおのずと見えてくるのですが、これは物理マシンのパワーや仮想マシンの負荷状況、ゲストOSの種類によって変化します。

 またVMwareのホストとして利用するマシンには、すべての仮想マシンを動作させるために必要な潤沢なメモリが必要です。もっとも、最新版のVMware Workstation 5ではメモリ利用効率が大幅に向上しています。以前のバージョンでは、例えば256MBytesを割り当てた仮想マシンを2台起動すると、その時点で512MBytesのメモリ領域が確保されます。一方、バージョン5では仮想マシン内のプロセスにオンデマンドでメモリ領域を割り当てるため、おおざっぱな感覚では総メモリ・サイズの1/2〜2/3程度の消費で収まります。

 例えば今回構築したVMware環境では、4台の仮想マシンの同時運用を行っています。3台のLinux仮想マシンにはそれぞれに256MBytes、1台のWindow XP仮想マシンには512MBytesを割り当てました。いずれのマシンも、TomcatやPostgreSQL、JBoss、メールサーバといった比較的軽量なプロセスを収容しています。この状態で、VMwareはおよそ900MBytesのメモリを消費しています。またすべての仮想マシンがアイドル状態の場合、CPU使用率は常時10%前後となります(図2)。

図7 仮想マシン4台動作時のCPUとメモリの消費状況

 ちなみに、Windows XP仮想マシンよりもLinux仮想マシンの方が物理マシンにかける負担は低いという印象です。今回、Windows XP仮想マシンを1台運用していますが、これをストップすればLinux仮想マシンをあと2台程度は運用できると思われます。

 また今回の導入に先立ち、筆者は古いマシン上でVMwareを動作させ、いくつかの試行錯誤を通じて仮想マシンのパフォーマンスを引き出すコツをつかみました(ただしヴィエムウェアが推奨しているわけではありませんのでご了承ください)。それは以下の2点です。

  • 仮想マシン専用のディスク・ドライブを用意する
  • 仮想マシンのディスク領域を事前に割当する

 VMwareの仮想マシンの弱点は、ディスクI/O性能の低下を防ぐための工夫が必要という点です。例えば物理マシンのシステム・ディスク上に仮想マシン用のディスク領域を確保すると、「複数のOSがシステム・ディスクを共有している」ことになり、あまり高い性能は得られません。そこで今回は、Western Digital社のSATA対応ディスク・ドライブWD740 Raptorを2台用意し、それぞれを「物理マシンのシステム・ディスク用」と「仮想マシンのディスク領域用」として占有させました。このRaptorは74GBで2万円程度と高価ですが、回転速度10,000rpmとシークタイム4.5msというSCSIドライブ並みのパフォーマンスの高さが特長です。

図8 Western Digital社のSATAディスク・ドライブWD740 Raptor

 またVMwareの仮想マシンでは、指定したサイズのディスク領域が最初から確保されるわけではありません。仮想マシンのディスク領域は、物理マシン上では1つの巨大ファイルとして見えます。仮想マシン内部でのディスク消費に応じて、このファイルのサイズが徐々に増加する仕組みです。しかしこの構成で複数の仮想マシンを運用すると、ディスク・ドライブのフラグメンテーションが急速に進み、ディスクI/O性能の足を大きく引っ張ります。これを避けるには、仮想マシン作成時のウィザードにて「Allocate all disk space now」を選択し、領域全体をはじめから確保しておきます。

 以上のような工夫を施すことで、十分に実用的なパフォーマンスを有する仮想マシンを構成できます。

 次回は、テスト用のJava開発環境をスピーディーに構築する手順。仮想マシンと物理マシンのベンチマークを行い、仮想マシンの開発環境としての実用性を検証します。

2/2  

 INDEX

第2回 Java仮想化開発環境を構築
  Page1
VMware Workstation 5の導入

パワフルなPCの用意
Page2
ポータブルなJava開発環境を実現する
仮想マシンのパフォーマンスを考える




Java Solution全記事一覧

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間