パフォーマンスのチューニング
このドキュメントでは、パフォーマンス改善のためにアプリケーションをチューニングする方法を説明します。Confluence の障害に対するトラブルシューティングではありません。Confluence がクラッシュしている場合は、「Confluence のハングアップやクラッシュに関するトラブルシューティング」を参照してください。
あらゆるサーバーアプリケーションと同様に、Confluence は頻繁に利用されるため、何らかのチューニングが必要になる場合があります。弊社では、Confluence が多種多様な環境下で十分なパフォーマンスを実現できるように最善を尽くしていますが、あらゆる人の環境や利用パターンに最適な単一の設定は存在しません。
Confluence のパフォーマンスに問題があり、解決するために支援が必要な場合は、「パフォーマンス サポートのリクエスト」をお読みください。
Performance Data Collector
詳細は、「Performance Data Collector の使用方法」を参照してください。
On this page:
ツールの最新バージョンを使用する
ご使用のアプリケーションサーバーおよび Java ランタイム環境の最新バージョンを使用します。通常、より新しいバージョンのほうが、パフォーマンス向上のために最適化されています。
RAM 不足に起因するスワッピングを回避する
サーバーのスワッピングアクティビティを常に監視します。使用可能な RAM が十分にない場合、サーバーはConfluence のヒープデータの一部をハードディスクにスワップし始めます。これにより、JVM のガベージコレクションが著しく遅くなり、Confluence のパフォーマンスに影響を及ぼします。クラスタ化インストールでは、スワッピングはパフォーマンスの問題が原因のクラスタパニック を招く可能性があります。これは、スワッピングによりガベージコレクション中に JVM が一時停止することで、クラスタ化ノードの同期を維持するために必要なノード間通信が中断されてしまうことにより生じます。
同じインフラストラクチャーを使用している他のシステムにも注意する
1 台の強力なサーバーのみでデータベースやアプリケーションサーバーをホスティングし、そのサーバーですべての重要なプログラムを実行するというのは、魅力的に聞こえるかもしれません。もし、システムが完璧に設定されていればおそらく問題ないでしょう。しかし、何かが欠けていている可能性があれば、1つのアプリケーションのバグが他のアプリケーションに影響を与え始めるかもしれません。また、Confluence が毎日正午頃に遅くなるのであれば、その時間に別のアプリケーションが共有データベースを使用して複雑なレポートを生成していることが原因の場合もあるでしょう。いずれにしても、アプリケーションが同じインフラストラクチャーを共有していても相互に害を及ぼすことができないようにするか、アプリケーションを別々のインスタンスに移動して制御しやすくするなど、これらのシステムが錯綜しないようにします。
データベースの選択
組み込みの H2 データベースは Confluence の評価のために提供されており、本番の Confluence サイト用ではありません。評価が終了した後、サポートされている外部データベースに切り替える必要があります。ユーザーが熟知しているデータベースを使用することをお勧めします。これは、ユーザーがデータベースを保守できるかどうかによって、データベースの選択そのものよりもデータベースから得られる利益に大きな差が生じると考えられるからです。
データベース接続プール
Confluence に対する負荷が高い場合、データベースへの同時接続を増やす必要が生じることもあります。
- JNDI データソースを使用している場合、アプリケーション サーバーの設定ファイルでこれを行います。
- データベースに直接アクセスするように Confluence を構成した場合は、 hibernate.c3p0.max_size プロパティと hibernate.hikari.maximumPoolSize プロパティ (存在する場合) を手動で編集する必要があります。これらのプロパティは、confluence.home ディレクトリにある confluence.cfg.xml ファイル内にあります。このファイル内の URL を変更した後、Confluence を再起動します。
データベースのコネクション プールをチューニングする必要があるかどうかを評価するには、様々な時間帯(ピークを含む)に、スレッド ダンプを取得します。同時にいくつのデータベース コネクションが使用されているか調査します。
一般的なデータベース
Confluence の実行が遅い場合、最も可能性が高い原因の一つは、データベース(または周辺)にいくつかボトルネックがあるという点です。
最初に、管理コンソールのシステム情報タブにある "データーベース レイテンシー" フィールドを確認します。
レイテンシーはデータベースへ小さなリクエストを送信し、1列または1行のみのテーブルに問い合わせることで計算されますこのクエリは高速になることが期待され、1 または 2 ミリ秒以内に返されます。値の表示が 3 ~ 5 ミリ秒の場合、すでに問題がある場合があります。値が 10 ミリ秒を超える場合、確実に調査および改善が必要です。数ミリ秒の値自体は小さいものですが、Confluence は 1 つのページ リクエストに対して複数のデータベース クエリを送信していることや、これらのクエリは複雑なものであることを考慮する必要があります。高いレイテンシーは、あらゆる種類の問題 (ネットワーク遅延、データベース遅延、コネクション プールの争奪など) に起因します。レイテンシーが平均 2 ミリ秒を下回るまで改善を続けることをおすすめします。
確実に、レイテンシーは最初に見るべき項目です。レイテンシーがゼロになっても、例えばテーブルのインデックスが十分に付けられていない場合など、大規模なデータベースの問題が発生します。そのため、レイテンシーが低いからといって惑わされないでください。
データベース統計とクエリ分析
最近のデータベースには現在のデータの統計情報の収集に基づくクエリ オプティマイザーが搭載されています。SQL EXPLAIN ステートメントを使用すると、クエリ オプティマイザーがどれくらい有効に働いているかを示す情報を得ることができます。コスト見積もりが不正確な場合、データベースの統計情報の収集を実行する必要があります。実際のコマンドはデータベースとバージョンによって異なります。多くの場合、Confluence の実行中に統計情報の収集を実行することができますが、データベースの負荷が増加するため、営業時間後、または週末に実施するのが良いでしょう。
Confluence および Apache におけるキャッシュのチューニング
データベースの負荷を減らし、多くの操作をスピード アップさせるため、Confluence はデータのキャッシュを保持しています。このキャッシュのサイズをチューニングすることで、Confluence をスピード アップ(キャッシュが非常に小さい場合)させたり、使用するメモリ量を減らす(キャッシュが非常に大きい場合)ことができる場合があります。
Confluence キャッシュのチューニング方法の詳細については、「キャッシュ パフォーマンスのチューニング」のドキュメントを参照してください。
アンチウイルス ソフトウェア
アンチウイルス ソフトウェアによって、Confluence のパフォーマンスは大幅に低下します。ハードディスクへのアクセスを遮断するウィルス対策ソフトウェアの場合は特に有害であり、Confluence でエラーを引き起こす可能性もあります。Confluence ホーム ディレクトリ、インデックス ディレクトリ、およびすべてのデータベース関連ディレクトリを無視するように、アンチウイルス ソフトウェアを設定する必要があります。
HTTP 圧縮を有効にする
帯域幅が Confluence インストールのボトルネックの原因である場合、HTTP 圧縮を有効にすることを考慮する必要があります。これは、外部と面しているインスタンスを実行している場合に、帯域幅コストを減らすのに役立ちます。
Confluence 2.8 以前の、メモリ消費量が多くなる場合があるというHTTP 圧縮の既知の問題に注意してください。
パフォーマンスをテストする
すべての設定変更をデモ システム上で試す必要があります。理想的には、ユーザーの振る舞いをシミュレートするカスタマイズ負荷テストを実施するべきです。
アクセス ログ
Confluence の組み込みのアクセス ロギングを有効にすることで、遅いページとそこにアクセスするユーザーを見つけることができます。
組み込みプロファイラー
ページ リクエスト プロファイリングを使用したパフォーマンス低下のトラブルシューティングに従って、Confluence の組み込みプロファイラーを使用してページ遅延の原因を特定することができます。
アプリケーション サーバーのメモリ設定
「Fix java.lang.OutOfMemoryError in Confluence (Confluence で java.lang.OutOfMemoryError を修正する)」をご覧ください。
Web サーバー設定
高負荷環境の場合、アプリケーション サーバーの前に Apache など web サーバーを使用することで、パフォーマンスを改善することができます。「Apache の後ろで Confluence を実行する」の設定ガイドを参照してください。
新しい web サーバーを設定する場合、負荷を処理するのに十分なスレッド/プロセスを設定するようにしてください。これは、web サーバーおよびアプリケーション サーバー コネクターの両方に適用されますが、通常は別々に設定されます。可能であれば、アプリケーション サーバーに対する web サーバー コネクション内のコネクション プーリングを有効にする必要があります。
利用可能なメモリリークのトラブルシューティング
一部の外部プラグインでは、通常、かなり昔に作成されたものや、積極的にメンテナンスされていないものなどがあり、そのようなプラグインではメモリを大量に消費したり、それを開放しないなどの問題が報告されています。最終的にはクラッシュを引き起こす場合がありますが、最初はパフォーマンスの低下として現れます。Confluence のハングアップやクラッシュに関するトラブルシューティング ガイドは、開始するのにいい場所です。ガイドに記載されている既知の原因のいくつかは、クラッシュやハングアップ以外のパフォーマンスの問題を生じさせる可能性があります。
権限の迅速化を有効にする
Confluence は表示する内容を決定するために、現在のユーザーの権限を定期的に確認する必要があります。権限の迅速化サービスではデータベースでの権限情報の保管方法を変更して、権限チェックを最適化します。多少の負荷がかかりますが、多数のコンテンツを持つ権限が複雑なサイトのパフォーマンスが大幅に改善します。逆に、コンテンツが少ない、または権限が単純な場合 (グループがごくわずかである、または入れ子ページの制限が少ない)、このサービスによって Confluence サイトの速度が大幅に改善される見込みは低くなります。