次のようにして、administrator.cfc をインスタンス化します。
ColdFusion の 2018 リリースでは、サーバーモニターが削除されました。代わりに、より優れた、直感的なアプリケーションパフォーマンス監視ツールであるパフォーマンス監視ツールセットを導入しました。
詳しくは、パフォーマンス監視ツールセットの概要を参照してください。
ColdFusion サーバーモニターを使用すると、ColdFusion サーバー上のアクティビティを追跡できます。リクエスト、クエリ、メモリ使用量、エラーといった、サーバーについての情報を確認できます。また、サーバー情報の収集を開始および終了したり、サーバーのスナップショットを撮ったりできます。
複数の ColdFusion サーバーのステータスを追跡する場合は、マルチサーバーモニタを使用します。
ColdFusion サーバーについての情報の収集
サーバーモニターとマルチサーバーモニターを使用すると、ColdFusion サーバーについての情報を取得できます。通常、サーバーモニターではマルチサーバーモニターより詳細な情報が提供されますが、マルチサーバーモニターは複数の ColdFusion サーバーのステータスを追跡するのに適しています。
サーバーモニターは、次の情報を提供します。
- リクエスト、クエリ、セッション、およびスレッド
- 応答時間
- メモリ使用量
- アラートおよびエラー
- サーバー情報のスナップショット
マルチサーバーモニターは、次の情報を提供します。 - リクエスト
- 応答時間
- JVM メモリ使用量
- アラート、エラー、およびタイムアウト
ColdFusion サーバーモニタの開始
ColdFusion サーバーモニターは、ColdFusion Administrator からアクセスする SWF アプリケーションです。サーバーモニターを開始すると、データの収集と表示が開始されます。
ColdFusion マルチサーバーモニターは、複数の ColdFusion サーバーについての情報を提供する SWF アプリケーションです。特定の ColdFusion サーバーの詳細情報を収集するには、サーバーモニターを使用します。複数のサーバーの情報を収集するには、マルチサーバーモニターを使用します。
ColdFusion サーバーモニターの開始
- ColdFusion Administrator を開始します。
- ColdFusion サーバーの監視/サーバーモニターを選択し、「サーバーモニターの起動」をクリックします。
ColdFusion マルチサーバーモニターの開始
- ColdFusion Administrator を開始します。
ColdFusion サーバーの監視/サーバーモニターを選択し、「マルチサーバーモニターの起動」をクリックします。
クロスドメインに関する詳細は crossdomain.xml ファイルで指定し、このファイルを Web ルートの直下に配置する必要があります。従来、このファイルは <webroot>/CFIDE/multiservermonitor-access-policy.xml に配置されていました。詳細については、www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html を参照してください
デフォルトでは、サーバーモニターはオフになっています。監視、プロファイリング、メモリトラッキングを開始または終了するには、サーバーモニターの上部のバーにあるボタンをクリックします。次の表は、開始ボタンをクリックしたときにサーバーモニターが収集するデータを示しています。
ボタン |
アクション |
---|---|
監視を開始 |
すべてのリクエストについての情報の収集を開始します。アクティブなリクエスト、低速なリクエスト、アクティブなセッション、累積サーバー使用量の多いリクエスト、ヒット数の多いリクエスト、テンプレートキャッシュのステータス、リクエストスロットルデータ、タイムアウトしたリクエスト、エラーが発生したリクエスト、サーバーのアラートなどの情報を収集できます。サーバーモニターは、「パッケージとデプロイ」ページで除外されたリクエストについての情報は収集しません。 |
プロファイリングを開始 |
プロファイリングについての情報の収集を開始します。低速なリクエストのレポートのタグや関数のタイミング情報、アクティブなリクエストのレポートの CFML スタックトレース、アクティブなクエリ、低速なクエリ、キャッシュクエリ、クエリキャッシュのステータスについての情報、データベースプールのステータス、実行頻度の高いクエリなどの情報を収集できます。この情報収集によって、アプリケーションのボトルネックを特定できます。個々の低速なリクエストやメモリ消費量の多いリクエストごとに詳細を表示できます。実行速度に影響を及ぼしているタグや関数を特定したり、メモリ消費量が最も高い変数を確認できます。この情報を開発サーバーで使用できます。プロファイリング情報を収集するには、監視、プロファイリング、および (必要であれば) メモリトラッキングを有効にします。 |
メモリトラッキングを開始 |
メモリ消費量についての情報の収集を開始します。全体的なメモリ使用量、最もメモリを使用しているクエリとセッション、すべてのアプリケーションとサーバースコープでのメモリ使用量および(プロファイリングが有効な場合は)メモリ使用量の多いリクエストのレポートでの最大の変数に関するプロファイリング情報などを収集できます。クエリ関連のレポートを表示するには、プロファイリングを有効にする必要があります。メモリ使用量の多いクエリのレポートを表示するには、プロファイリングとメモリトラッキングを有効にする必要があります。 |
すべての統計情報をリセット |
サーバー上で収集されたすべての統計情報をリセットします。 |
更新 |
ページ上のすべてのグラフ、レポート、およびメッセージボックスのデータを更新します。 |
本番サーバーではこれらのオプションを有効にしないでください。有効にするとサーバーの動作が大幅に遅くなります。
サーバーモニタのレポートの表示
サーバーモニターを開始すると、概要ページが表示されます。他のページから概要ページに戻るには、「概要」をクリックします。
サーバーモニターはデフォルトで、グラフのデータを 5 秒ごとに、レポートのデータを 30 秒ごとに取得します。すべてのグラフは、収集したすべてのデータ、または指定した最近の一定期間内に収集したデータを表示します。
サーバーモニターでは、次のボタンを使用して有効と無効を切り替えることで、詳細を制御できます。
- 監視を開始 すべての監視を有効にします。
- プロファイリングを開始 個々のタグ、関数およびクエリの実行時間の監視を有効にします。
- メモリトラッキングを開始 様々なスコープでのメモリ使用量の追跡を有効にします。プロファイリングも有効になっていれば、サーバーモニターは個々のタグ、関数およびクエリのメモリ使用量を追跡します。監視、プロファイリング、およびメモリトラッキングのどの機能を有効にするかで、サーバーモニターが収集するデータが決まります。例えば、すべてのクエリのレポートでは、プロファイリングを有効にする必要があります。監視とプロファイリングを有効にした場合のパフォーマンスへの影響はほとんどありませんが、メモリトラッキングを有効にした場合はパフォーマンスに大きく影響することがあります。
概要
ColdFusion サーバーモニターを開始すると、「概要」ページが表示されます。このページには、サーバーの全体的なパフォーマンスの目安と、次のレポートが表示されます。
- 平均応答時間 応答時間の合計をリクエスト数で割ったものです。ドロップダウンリストをクリックして、サーバー開始時から収集されたデータ、過去 5 分間に収集されたデータまたは過去 1 分間に収集されたデータを表示します。
- 1 秒あたりのリクエスト数 1 秒あたりのリクエスト数です。ドロップダウンリストをクリックして、サーバー開始時から収集されたデータ、過去 5 分間に収集されたデータまたは過去 1 分間に収集されたデータを表示します。
- 低速なアクティブリクエスト 低速なリクエストページで設定されたしきい値よりも低速なアクティブリクエストです。リスト中のリクエストの数は、低速なリクエストページで設定されたレポートサイズによって異なります。
- アラート すべてのアラートをリストします。アラートが生成される条件を指定するには、アラート/アラートの設定を選択します。アラートは、サーバーが無応答状態に近づいているか、実行が遅くなっていることを示します。
- 前回のエラー フィルターの設定ページで指定されたインクルードパスにある、サーバー上のいずれかのアプリケーションによって生成された最新のエラーです。さらに、要約ページは、使用可能な他のレポートをリストします。別のレポートを表示するには、名前をクリックします。使用できるレポートは次のとおりです。
- エラーが発生したリクエスト
- タイムアウトしたリクエスト
- 次の時間を超過したリクエスト:20 秒
- 次のメモリ使用量を超過したリクエスト:40 MB
- 次のサイズを超過したセッション:4 KB
- 次の時間を超過したクエリ:20 秒
- 次の時間を超過したクエリ:10 秒 (平均)
- 次のサイズを超過したクエリ:20 KB
統計情報
リクエストの統計情報
「リクエストの統計情報」セクションには次のレポートがあります。
アクティブなリクエスト
アクティブなリクエストのレポートは、「全般」の設定で指定されたレポートのリクエスト間隔よりもロードに時間がかかるすべての現在アクティブなリクエストをリストします。リクエストには、ブラウザーのリクエスト、CFC HTTP リクエスト、Web サービス、ゲートウェイ、および Flash Remoting が含まれます。アクティブなリクエストのリスト、詳細ビュー、またはグラフを表示できます。詳細ビューには CFML スタックトレースが含まれており、これを使用するとデッドロックしているリクエストや実行時間の長いリクエストがブロックされている場所を発見できます。すべてのリクエストのグラフを 1 つのビューに表示するには、「チャート」をクリックします。グラフには、サーバーが現在処理しているリクエスト数、および実行開始のためにアプリケーションサーバースレッドの割り当てを待っているリクエスト数が表示されます。実行待ちのリクエスト数が多いことがグラフからわかった場合は、スレッドプールのサイズを増やしてください。または、ColdFusion がクラスタにデプロイされている場合は、より効率的なロードバランスのためにサーバーインスタンスを追加してください。
サーバーモニタには、Flash Remoting リクエストとして LiveCycle Data Management Assemblers が含まれます。
アクティブな ColdFusion スレッド
アクティブな ColdFusion スレッドのレポートは、すべての現在アクティブなスレッドをリストします。アクティブなスレッドのリスト、詳細ビュー、またはグラフを表示できます。
低速なリクエスト
低速なリクエストのレポートは、低速なリクエストをリストします。リクエストがこのページに表示されるかどうかを決定するしきい値を指定できます。しきい値が低いほど、より多くのリクエストがリストに表示されます。レポートサイズのオプションを使用すると、リストに表示するアイテム数を制限できます。低速なリクエストのリストまたは詳細ビューを表示できます。詳細ビューには CFML スタックトレースが含まれます。詳細については、リクエストの処理を参照してください。
低速な ColdFusion スレッド
低速な ColdFusion スレッドのレポートは、低速な ColdFusion スレッドをリストします。ColdFusion スレッドがこのレポートに表示されるかどうかを決定するしきい値を指定できます。しきい値が低いほど、より多くのリクエストがレポートに表示されます。
アクティブなセッション
アクティブなセッションのレポートは、すべてのアクティブなセッションをリストします。アクティブなセッションのリスト、詳細ビュー、またはグラフを表示できます。グラフには、アクティブなセッション、およびサーバーにログインしたユーザー数が表示されます。
累積サーバー使用量の多いリクエスト
累積サーバー使用量の多いリクエストのレポートは、サーバーの CPU 時間を累積して最も使用したリクエストをリストします。1 回のリクエストの実行時間が短くても、頻繁に実行されれば多くの CPU 時間を消費することがあります。累積サーバー時間が多いリクエストを調整すると、サーバー全体のパフォーマンスの向上に役立ちます。累積サーバー使用量の多いリクエストのリスト、詳細ビュー、またはグラフを表示できます。レポートサイズのオプションを使用すると、リストに表示するアイテム数を制限できます。
ヒット数の多いリクエスト
ヒット数の多いリクエストのレポートは、ヒット数の多いリクエストをリストします。ヒット数の多いリクエストのリストまたはグラフを表示できます。レポートサイズのオプションを使用すると、リストに表示するアイテム数を制限できます。
テンプレートキャッシュのステータス
テンプレートキャッシュのステータスのレポートは、テンプレートキャッシュについての情報を表示して、そのパフォーマンスを示します。テンプレートキャッシュは、ColdFusion がコンパイルされた CFM テンプレートと CFC テンプレートを格納するメモリのことです。テンプレートが初めて実行されると Java バイトコードにコンパイルされ、テンプレートキャッシュに格納されます。テンプレートが変更されない限り、ColdFusion はテンプレートキャッシュにあるコンパイルされた形式のテンプレートを使用します。テンプレートキャッシュのステータスページではキャッシュのヒット率を監視できます。キャッシュのヒット率は、キャッシュのヒット数とキャッシュのミス数の割合を示します。「キャッシュのヒット」とは、テンプレートがキャッシュから取得されたことを指します。「キャッシュのミス」とは、テンプレートをコンパイルしてキャッシュに配置する必要があることを指します。サーバーのパフォーマンスを向上させるにはヒット数をミス数より多くすること、つまり高いキャッシュのヒット率が必要です。キャッシュのヒット率が低すぎる場合は、ColdFusion Administrator でサーバーの設定/キャッシュ機能を選択してキャッシュのサイズを増やしてください。詳しくは、キャッシュ機能を参照してください。また、[テンプレートキャッシュ] ページでは、キャッシュにあるテンプレート数およびキャッシュが占有する推定メモリ量を監視できます。
テンプレートキャッシュの数には、LRU (Least Recently Used: 使用時期が最も古い) キャッシュとソフトキャッシュの両方が含まれます。したがって、その数は ColdFusion Administrator で設定された数を超えることがあります。
リクエストスロットルデータ
リクエストスロットルデータのレポートは、ColdFusion サーバーによってスロットルされたすべてのリクエストをリストします。リクエストを処理するのに十分なメモリが使用可能でないために ColdFusion がリクエストをキューに入れたときに、リクエストがスロットルされます。指定された制限よりも小さいリクエストは、キューに入れられず、合計メモリの一部としてカウントされません。指定された制限を超えるリクエストは総メモリの一部としてカウントされ、リクエストスロットルのメモリサイズを超えている場合は、キューに入れられます。デフォルト値は 4 MB です。スロットルのしきい値とメモリを変更するには、ColdFusion Administrator でサーバーの設定/設定を選択します。
メモリ使用量
「メモリ使用量」セクションには次のレポートがあります。
メモリ使用量の要約
メモリ使用量の要約のレポートは、Server スコープ、アプリケーションスコープ、セッションスコープなどの、サーバー上のパーシスタントスコープによる推定メモリ消費量のグラフを表示します。サーバーのメモリ消費量が多すぎる場合、グラフによってどのスコープがメモリを使いすぎているか、およびいつメモリの使いすぎが始まったかがわかります。詳細レポートによって、サーバースコープ、およびすべてのアクティブなアプリケーションスコープとセッションスコープの推定メモリ消費量を確認できます。詳細については、変数のメモリ使用量を参照してください。
サーバーモニターに表示されるメモリ使用量の情報は推定であり、実際のメモリ使用量と異なる可能性があります。メモリ使用量のレポートの情報は、様々な Java タイプとそれに対応する ColdFusion タイプがメモリを消費する方式の経験的評価に基づくものです。メモリ消費量のレポートで得られる情報は絶対的な基準としてではなく、目安として使用してください。また、サーバーモニタでは、COM オブジェクトのメモリ使用量情報は追跡されません。
メモリ使用量の多いリクエスト
メモリ使用量の多いリクエストのレポートは、メモリを最も使用したリクエストをリストします。リストまたは詳細ビューを表示できます。詳細ビューは、リクエストの実行中に最もメモリを使用した変数をリストします。
メモリ使用量の多い CF スレッド
メモリ使用量の多い CF スレッドのレポートは、メモリを最も使用した ColdFusion スレッドをリストします。
メモリ使用量の多いクエリ
メモリ使用量の多いクエリのレポートは、メモリを最も使用したクエリをリストします。クエリがこのレポートに表示された場合、クエリを調整して結果セットのサイズを減らすか、クエリをキャッシュしてメモリ消費量とネットワークのトラフィックを減らしてください。このレポートにはキャッシュクエリについての情報は含まれません。
メモリ使用量の多いセッション
メモリ使用量の多いセッションのレポートは、メモリを最も使用したセッションをリストします。
アプリケーションスコープでのメモリ使用量
アプリケーションスコープでのメモリ使用量のレポートは、メモリを最も使用したアプリケーションスコープをリストします。詳細では、メモリを最も使用したアプリケーションスコープ変数をリストします。
サーバースコープでのメモリ使用量
「サーバースコープでのメモリ使用量」ページは、メモリを最も使用した Server スコープ変数をリストします。
データベース
「データベース」セクションには次のレポートがあります。
アクティブなクエリ
アクティブなクエリのレポートは、低速なクエリのレポートで指定されたしきい値よりもロードに時間がかかるすべての現在アクティブなクエリをリストします。リストまたは詳細ビューを表示できます。
低速なクエリ
低速なクエリのレポートは、低速なクエリのレポートと平均で低速なクエリのレポートを提供します。どちらのレポートでも、テンプレートの名前と行番号でクエリを識別できます。低速なクエリのレポートは、低速なクエリの特定のインスタンスと、そのクエリの SQL ステートメントを表示します。詳細ビューには SQL ステートメントが含まれます。この情報によって、そのクエリのインスタンスが低速な理由を特定できます。平均で低速なクエリのレポートは平均して低速なクエリを示します。SQL ステートメントはインスタンスによって異なる可能性があるので、このレポートではクエリの SQL コードは表示されません。どちらのレポートにもキャッシュクエリは含まれません。パフォーマンスを向上させるには、これらのレポートにリストされたクエリを調整します。クエリの結果が固定的である場合は、ColdFusion のクエリキャッシュを使用してクエリをキャッシュすることでパフォーマンスが向上する可能性があります。詳細については、データベース応答時間を参照してください。
キャッシュ済みのクエリ
キャッシュ済みのクエリのレポートは、キャッシュされたクエリをリストします。キャッシュ済みのクエリのリスト、または個々のクエリの詳細を表示できます。クエリの実行時間が短い場合は、本当にキャッシュする必要があるか判断します。実行回数が多い場合は、クエリの cachedafter 設定と cachedwithin 設定を調整してください。
クエリキャッシュのステータス
クエリキャッシュのステータスのレポートは、キャッシュクエリの数、クエリキャッシュが消費する推定メモリ量、およびクエリキャッシュのヒット率のグラフを表示します。クエリキャッシュのヒット率が高いほど、パフォーマンスが向上します。キャッシュのヒット率が低すぎる場合は、クエリキャッシュのサイズを増やしてください。または、アプリケーションのクエリキャッシュの使用方法を分析するには、cfquery タグの cachedAfter 属性と cachedWithin 属性を調整できるか判断します。クエリキャッシュが大きすぎる場合は、キャッシュからいくつかクエリを削除できないか判断します。
プールのステータス
プールのステータスのレポートは、データソース、ColdFusion サーバー上のアプリケーションがデータソースを使用しているかどうか、および接続数をリストします。データソースのリスト、または個々のデータソースの詳細を表示できます。
実行頻度の高いクエリ
実行頻度の高いクエリのレポートは、最も頻繁に実行されたクエリをリストします。クエリの個々のインスタンスの実行時間が短い場合でも、実行頻度の高いクエリを調整するとパフォーマンスを向上できます。このレポートはキャッシュクエリについての情報は提供しません。クエリのリスト、または個々のクエリの詳細を表示できます。
エラー
「エラー」セクションは、次のレポートを含みます。
エラーが発生したリクエスト
エラーが発生したリクエストのレポートは、エラーを生成したテンプレートをリストします。このレポートには、テンプレートのパス、およびそのテンプレートでエラーが発生した回数が含まれます。レポートは、最近発生したエラーの発生時間、エラーメッセージ、CFML スタックトレース、および Java スタックトレースも表示します。テンプレートのリスト、または個々のテンプレートの詳細を表示できます。詳細情報には CFML スタックトレースが含まれます。
タイムアウトしたリクエスト
タイムアウトしたリクエストページは、タイムアウトしたテンプレートをリストします。レポートには、テンプレートのパス、テンプレートのタイムアウト回数、テンプレートの最近の応答時間、テンプレートが最近使用された時刻、最近の推定リクエストサイズ、および CFML スタックトレースが含まれます。タイムアウトは CFML 内でのみ発生するので、Java スタックトレースは提供されません。テンプレートのリスト、または個々のテンプレートの詳細を表示できます。詳細情報には CFML スタックトレースが含まれます。
アラート
アラートのレポートは、アラートによって生成されたすべてのスナップショットをリストします。
アラートの設定
アラートの設定ページでは、アラートを生成するしきい値を指定できます。アラートは、低速サーバーや無応答サーバーを含む、潜在的な問題を警告します。低速サーバーのアラートは、サーバーの平均応答時間が、指定された制限を超えると発生します。無応答サーバーのアラートは、指定された数を超えるスレッドが、指定された秒数よりも長い間ビジーになったときに発生します。無応答サーバーのアラートはスナップショットファイルを作成し、そのファイルによってリクエストスレッドが応答しない場所を特定できます。どちらのタイプのアラートでも、アラートが発生したときにカスタム CFC を実行できます。それによって、アラート状態に対して独自の自動応答を返すことができます。アラートが発生したときに電子メールを送信するかどうか、および送信する際の宛先を指定できます。また、ColdFusion Administrator の「メール」ページで指定されたサーバーにログインするためのユーザー名とパスワードを指定することもできます。
スナップショット
スナップショットのレポートは、実行されたすべてのスナップショットをリストします。スナップショットには、スナップショットが実行された瞬間の ColdFusion サーバーについての詳細が含まれます。これらの詳細は次のとおりです。
- スナップショットが実行された時刻と原因
- プロファイリングとメモリトラッキングが有効になっているかどうか
- スナップショットが実行された瞬間に存在した実行中および実行待ちのリクエスト数
- メモリ使用量についての次のような情報
- JVM メモリ使用量
- サーバー、アプリケーション、およびセッションスコープでのメモリ使用量
- スロットルのキューサイズとメモリ使用量
- キャッシュクエリについての情報
- データベースプールのステータス
- Java スタックトレース
スナップショットは、次のいずれかの場合に実行されます。 - サーバーモニターの「ユーザーのスナップショット」ページにある「スナップショットを実行」をクリックしたとき
- 無応答サーバーまたは低速サーバーのいずれかのしきい値を超えたとき
「スナップショットを実行」をクリックした場合、サーバーモニターはスナップショットの情報を収集して、cf_root/logs/snapshots フォルダーの snapshot_usrgen_timestamp.txtファイルに保存します。サーバーモニターがスナップショットを作成する場合、cf_root/logs/snapshots フォルダーの snapshot_sysgen_timestamp.txt ファイルに情報を保存します。
サーバーモニターの設定の指定
レポートの生成に使用する設定を指定するには、「設定」をクリックします。
次の項目を指定できます。
- サーバーモニターのレポートの更新頻度
- サーバーモニターのグラフの更新頻度
- 平均応答時間の計算頻度
- テンプレートの完全なパスを表示するかどうか
監視で除外するファイルパスと含めるファイルパスを指定する場合や、ColdFusion Administrator を監視するかどうかを指定する場合は、「設定」をクリックして「パッケージとデプロイ」タブをクリックします。
プロファイリングから除外するファイルパスを指定するには、「設定」をクリックして「プロファイリングフィルター」タブをクリックします。
デフォルトでは、サーバーモニターは webroot ディレクトリとそのサブディレクトリ、および ColdFusion Administrator のマッピングページで指定されたディレクトリにあるすべての ColdFusion テンプレートについての情報を収集します。一方、サーバーのすべてのリクエストを監視する必要がない場合もあります。その場合は除外するパスを指定すると、サーバーモニターは指定したディレクトリとそのサブディレクトリにあるファイルについての情報は収集しません。この機能は、本番サーバーで監視対象を制限する際に特に役立ちます。インクルードパスのオプションを使用すると、除外したディレクトリのサブディレクトリを監視できます。
テンプレートのパスのエイリアスを指定するには、「設定」をクリックして「エイリアス」タブをクリックします。
ColdFusion Server Monitor API
Server Monitor API を使用すると、サーバーモニターが収集するすべてのデータをプログラムで取得することができます。ColdFusion コンポーネントの servermonitoring.cfc に、サーバーモニターのタスクを実行するために呼び出すメソッドが含まれています。例えば、サーバーの平均応答時間を取得するには、getAverageResponseTime メソッドを使用します。
サーバーモニター API のメソッド、メソッド引数、およびマニュアルを参照するには、CFC Explorer を使用してください。そのためには、http://localhost:8500/CFIDE/adminapi/servermonitoring.cfc にアクセスします。
Server Monitor API の使用
-
<cfscript> adminObj = createObject("component","cfide.adminapi.administrator");
注意:次のように、administrator.cfc のインスタンス化と login メソッドの呼び出しを 1 行のコードで実行することもできます。
createObject("component","cfide.adminapi.administrator").login("admin");
-
administrator.cfc の login メソッドを呼び出す際には、次のように ColdFusion Administrator パスワードまたは RDS パスワードを渡します。
adminObj.login("admin");
-
次のようにして、サーバーモニター CFC をインスタンス化します。
myObj = createObject("component","cfide.adminapi.servermonitoring");
-
目的の CFC メソッドを呼び出します(この例では、getAverageResponseTime を使用しています)。
myObj.getAverageResponseTime();
例
次の例では、サーバーモニター API を使用して ColdFusion サーバーが接続しているデータソースと接続数をリストしています。
<cfscript> // Login to the ColdFusion Administrator. adminObj = createObject("component","cfide.adminapi.administrator"); adminObj.login("admin"); // Instantiate the Server Monitor object. myObj = createObject("component","cfide.adminapi.servermonitoring"); // Get the dsn pool data array dbpool = myObj.getDbPoolStats(); </cfscript> <! --- データソースのリスト---> ColdFusion サーバーは次のデータソースに接続されています。<br /> <cfloop index="i" from="1" to="#ArrayLen(dbpool)#"> <cfoutput>#dbpool[i].DSN# #dbpool[i].TOTALCONNECTIONCOUNT#<br /></cfoutput> </cfloop>
サーバーモニターを使用したサーバーのパフォーマンスの向上
サーバーモニターは、ColdFusion サーバーのパフォーマンスの向上に役立つ情報を提供します。
開発中のアプリケーションのボトルネックの発見
- 監視、プロファイリング、およびメモリトラッキングを有効にします。
- 低速なリクエストおよびメモリ使用量の多いリクエストのレポートのしきい値をゼロ (0) に設定します。
- テンプレートを実行します。
- それぞれのリクエストに対して、次のものを見つけます。
- 低速なリクエストのレポートで、低速なタグと関数。
- メモリ使用量の多いリクエストのレポートで、最大の変数。
JVM メモリ使用量
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 を設定するには、cf_root/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 のメモリ使用量を監視します。最適なヒープサイズを判断する際に、この情報を使用します。
変数のメモリ使用量
クライアント変数を使用する際は、Cookie や RDBMS 使用時のパフォーマンスが最高になるようにクライアント変数ストレージを設定してください。この値は、ColdFusion Administrator の「クライアント変数」ページで設定します。
可能であれば、特に isdefined()}} 関数を使用する際は、変数名を完全なスコープで指定することをお勧めします。例えば、{{<cfif isdefined("variables.myvariable")> は <cfif isdefined("myvariable")> よりもかなりパフォーマンスが向上します。
変数によるメモリ使用量を監視するには、サーバーモニターのメモリ使用量のレポートを表示します。
リクエストの処理
ColdFusion Administrator の設定ページにある「同時リクエスト」の設定は、負荷がかかった状態でのアプリケーションのパフォーマンスに最も大きく影響します。この設定は、受信リクエストを同時に処理する際に使用するスレッド数を決定します。ほとんどのアプリケーションにとって、最初は 1 つのプロセッサーにつき 3 を設定するのが最適です。デュアルプロセッサーコンピューターを使用している場合は、同時リクエストの制限を 6 に設定します。この設定の最適値を判断するには、アプリケーションに負荷をかけて様々な値でテストして、負荷をかけた状態で最もパフォーマンスが良い値を見つけます。アプリケーションをテストしている間、平均応答時間をサーバーモニターの要約ページに、レポートを統計情報に表示できます。
キャッシュ
本番アプリケーションで ColdFusion Administrator のキャッシュ機能ページにある「信頼できるキャッシュ」の設定を有効にすると、CFML ソースコードが最後にコンパイルされたときから変更されたかどうかを見るためにサーバーがファイルシステムを確認しないようになります。この設定によって、パフォーマンスに大きく影響するシステム I/O を最小化できます。ColdFusion Administrator のキャッシュ機能ページにある「テンプレートキャッシュサイズ」は、通常使用する ColdFusion テンプレートの数にほぼ等しくなるように設定してください。設定がパフォーマンスに影響する度合いを監視するには、サーバーモニターの「リクエストの統計情報」セクションにあるテンプレートキャッシュのステータスを使用します。
さらに、アプリケーションでは可能な限り次のいずれかの方法でキャッシュを使用してください。
- cfcache タグ
- データベースクエリのキャッシング。データベースキャッシングはパフォーマンスと拡張性を大幅に向上します。キャッシングを実行するには、cfquery タグなどのデータベースタグの cachedwithin 属性と cachedafter 属性を使用します。
- データをセッションスコープなどのパーシスタントスコープに格納して、1 回のリクエストよりも長い間使用可能にする方法。
データベース応答時間
データ操作は、可能な限りデータベースサーバーに実行させることをお勧めします。データ操作をおこなう SQL コードを追加するほうが、文字列操作やメモリ内クエリ(クエリオブクエリ)よりもはるかに効率的です。さらに、ストアドプロシージャを使用すると、通常の SQL クエリよりも一般的にパフォーマンスが向上します。通常、cfquery 呼び出しのクエリをストアドプロシージャに変換して cfstoredproc タグを使用すると、パフォーマンスが向上します。データベース応答時間の情報を表示するには、サーバーモニターの「データベース」セクションを使用します(データベースを参照してください)。
Server Manager クライアントのセットアップ
Server Manager は複数の ColdFusion サーバーを 1 箇所から集中管理するための AIR ベースアプリケーションです。Server Manager クライアント AIR アプリケーションは ColdFusion サーバーの監視ページからダウンロードしてインストールできます。
ColdFusion サーバーインスタンスに対して Server Manager クライアントを設定する方法の詳細については、Server Manager の使用を参照してください。
サーバーの監視設定の設定
監視サーバーは、次のいずれかの方法で設定できます。
- ColdFusion Administrator を使用します。
- neo-monitoring.xml および jetty.xml を手動で編集します。
- Admin API((servermonitoring.cfc)を使用します。
ColdFusion Administrator の使用
ColdFusion Administrator のサーバーの監視の設定ページ(ColdFusion サーバーの監視/監視の設定)を使用して、次の設定が行えます。
サーバーの監視を有効にします。
メモ:サーバーの監視を有効にして、SSL を使用するように設定する場合は、JVM.config ファイルの java.args に Dcoldfusion.jsafe=true を記述してください。
監視サーバーでリスンするポートを指定します。デフォルトのポートは 5500 です。
メモ:サーバー監視アプリケーションが既に実行中の場合は、ここに記載した設定は、アプリケーションを再起動するまで反映されません。
neo-monitoring.xml および jetty.xml の手動での編集
neo-monitoring.xml
次の場所に移動します。cf_root¥lib(サーバー設定の場合)orcf_root/WEB-INF/cfusion/lib(J2EE 設定の場合)。次のコードの値を true に変更します。<var name='ismonitoringserverenabled'><boolean value='false'/></var>
Jetty.xml
Jetty.xml の変更は、ポートの変更が必要な場合、または接続に HTTPS プロトコルを使用する場合にのみ行います。次の場所に移動します。 cf_root\lib(サーバー設定の場合)または cf_root/WEB-INF/cfusion/lib(J2EE 設定の場合)。XML ファイルでは、次の設定を指定できます。
- ポート
- 最大スレッド数
- ロギング
接続に HTTPS プロトコルを使用している場合
-
jetty.xml を開きます。
-
Set Connectors セクションを削除するか、コメントアウトします。
<Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host">0.0.0.0</Set> <Set name="port">5500</Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">false</Set> <Set name="lowResourcesConnections">10</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg>
-
Set SSL Connector セクションのコメントアウトを解除します。
<Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"> <Set name="host">0.0.0.0</Set> <Set name="port">5500</Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">1</Set> <Set name="AcceptQueueSize">100</Set> <Set name="Keystore">"path to keystore"</Set> <Set name="Password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set> <Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set> <Set name="truststore">"path to keystore"</Set> <Set name="trustPassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set> </New> </Arg> </Call>
-
ポートおよびキーストア関連の設定を指定します。
Admin API の使用
サーバーを監視するサーバーをプログラムで設定するには、ServerMonitoring.cfc を使用します。
今回のリリースで、次の Administrator API が追加されています。
API |
説明 |
---|---|
setMonitoringServerPort(port); |
監視サーバーのポート情報を設定します。 |
getMonitoringServerPort(); |
監視サーバーでリスンするポートの詳細を取得します。 |
getMonitoringServerProtocol(); |
監視サーバーのプロトコルの詳細を取得します。 |
enableMonitoringServer(); |
監視サーバーを有効にして、実行中でない場合は実行を開始します。 |
stopMonitoringServer(); |
監視サーバーを停止します。。 |
startMonitoringServer(); |
監視サーバーの実行を開始します。。 |
disableMonitoringServer(); |
監視サーバーを無効にして、実行中の場合は停止します。。 |
isMonitoringServerEnabled(); |
監視サーバーが有効であるかどうかを通知します。。 |
isMonitoringServerRunning(); |
監視サーバーが実行中であるかどうかを通知します。。 |
configureMonitoringServer(flag, port); |
監視サーバーを有効にして、ポート情報を設定します。。 |
トラブルシューティング
マルチサーバーの監視
マルチサーバーで監視を行う場合は、(CFRoot/MonitoringServer の) crossdomain.xml でクロスドメインの詳細を指定します。
他者による XML のポート定義の変更
ColdFusion Administrator に例外は表示されません。ログを確認してください。
SSL を使用した監視
SSL モードで監視サーバーの実行を開始すると、エラーが発生することがあります。
この既知の問題を解決するには、次のコードを jvm.config に追加してください。
"-Dcoldfusion.disablejsafe=true"
スレッドプールの更新
jetty.xml でスレッドプールを更新することができます。
XML ファイルの Server Threadpool セクションのスレッドプールを変更します。
<Set name="ThreadPool"> <! -- Default queued blocking threadpool --> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name="minThreads">2</Set> <Set name="maxThreads">50</Set> </New> <! -- Optional Java 5 bounded threadpool with job queue <New class="org.eclipse.thread.concurrent.ThreadPool"> <Set name="corePoolSize">50</Set> <Set name="maximumPoolSize">50</Set> </New> --> </Set>