ColdFusion はエンタープライズ Java アプリケーションなので、パフォーマンスに最も影響するソフトウェアコンポーネントは JVM (Java Virtual Machine: Java 仮想マシン) です。異なるベンダの JVM や、同じベンダでもバージョンの異なる JVM は、パフォーマンスについて異なる特性を持っています。ColdFusion とともに使用している JVM を変更することで、パフォーマンスを向上できる可能性があります。
ColdFusion には、アプリケーションサーバーとしての Tomcat の組み込みバージョンと、Sun の JVM バージョン 1.6 が含まれています。 一方、IBM WebSphere Application Server 上で動作する J2EE 用 ColdFusion は、WebSphere に設定されている JVM を使用します。
異なる JVM を使用するように ColdFusion を設定するには、<ColdFusion のルートディレクトリ>/runtime/lib/jvm.config ファイルをテキストエディタで編集して、java.home の値を、使用する JVM のルートディレクトリを指すように変更します。または、ColdFusion Administrator の [Java と JVM の設定] ページで JVM を変更することもできます。
JVM を切り替えるとソフトウェアの環境が大幅に変更されるため、最初に開発環境またはテスト環境で切り替えてください。また、本番サーバーに変更を加える前に、ColdFusion アプリケーションを十分にテストしてください。
JVM はメモリ管理を行っているため、JVM の設定方法によってパフォーマンスに大きな影響が出ることがあります。JVM の最も重要な設定は、初期ヒープサイズと最大ヒープサイズです。初期ヒープサイズは JVM が開始時に使用するメモリ量を表し、最大ヒープサイズは JVM が使用できるメモリ量を表します。これらの設定は、ColdFusion Administrator の [Java と JVM の設定] ページで変更できます。[初期メモリサイズ] の設定に初期ヒープサイズを指定し、[最大メモリサイズ] の設定に最大ヒープサイズを指定します。初期ヒープサイズと最大ヒープサイズを指定する JVM 引数は、それぞれ -XmsNm および -XmxNm です。ここで、N にはメガバイト (MB) 単位のヒープサイズを指定します。これらの JVM 引数は、jvm.config ファイル内の java.args 設定の値として保存されます。
デフォルトの最大ヒープサイズは、ColdFusion では 512 MB に設定されています。最高のパフォーマンスを得るには、初期ヒープサイズと最大ヒープサイズを同じ値に設定します。ColdFusion サーバー上でアプリケーションを実行する上で最適なヒープサイズを判断することで、パフォーマンスが向上します。大きすぎる値を設定すると、ガベージコレクションの頻度が高くなり、ヒープが大きいことで必要になる内部メモリ管理が発生してパフォーマンスが低下します。逆に、ヒープサイズに小さすぎる値を設定すると、使用可能であるよりも多いメモリをアプリケーションが使用したときに java.lang.OutOfMemoryError エラーが発生します。
最適なヒープサイズを最も効果的に判断するには、大きなヒープを割り当てておき、ピーク負荷をシミュレーションした状態でアプリケーションを実行して、アプリケーションが実際に使用するメモリ量を監視します。たとえば、アプリケーションが実際には 180 MB のメモリしか使用していなければ、ヒープサイズを 256 MB に減らすとパフォーマンスが向上する可能性があります。
java.lang.OutOfMemoryError エラーは、その他のより複雑な条件で発生することがあります。このエラーが発生するよくある原因に、オブジェクトがヒープの Permanent 世代領域を使い切ってしまうことがあります。この領域のデフォルトのサイズは 64 MB です。ColdFusion Administrator の [Java と JVM 設定] ページに次の JVM 引数を追加することで、このサイズを増やすことができます。次の例では 128 MB に増やしています。
-XX:MaxPermSize=128m.
ハードウェアの物理メモリは、最適なヒープサイズを判断する上で重要です。最大ヒープサイズを、物理メモリの空き容量より大きく設定すると、パフォーマンスに深刻な悪影響が出ます。たとえば、物理メモリが 512 MB しかない場合、最大ヒープサイズを 512 MB に設定しないでください。オペレーティングシステムや他の実行中のアプリケーションもメモリを使用するため、JVM プロセスが使用できるメモリは 512 MB よりも大幅に少なくなります。これは、ソフトウェアアプリケーションの必要条件に合ったハードウェアを導入することの重要性を示しています。最高の結果を得るために、1 GB 以上の物理メモリを搭載したサーバーハードウェアで実行してください。
サーバーモニタの [要約] ページは、JVM のメモリ使用量を監視します。最適なヒープサイズを判断する際に、この情報を使用します。