Glowroot による Liferay パフォーマンス問題のトラブルシューティング
Liferay DXP 2023.Q4+/ポータル GA100+
Glowroot を使用して、Liferay インストールにおけるパフォーマンスの問題を特定し、診断します。 次のトピックは、診断する一般的な問題の一部です。
高価なSQLクエリ
コストのかかる SQL クエリは応答時間が遅くなり、データベースに過度の負荷をかける可能性があります。 システムが処理しているさまざまなクエリを監視するには、 トランザクション タブをクリックします。 トランザクション パネルの下で、 クエリをクリックします。 表で、 合計時間 (ミリ秒) をクリックして、最も時間のかかるクエリを特定します。

コストのかかる SQL クエリにより、接続を待機している他のスレッドのバックアップが発生する可能性もあります。 Hikari 接続プールをゲージ ダッシュボードに追加するには、 構成 → ゲージに移動します。 新規追加 をクリックし、 com.zaxxer.hikari:type=Pool (HikariPool-1)を検索します。 すべての Mbean 属性を選択し、 [追加]をクリックします。
JVM タブをクリックし、左側のメニューで ゲージ をクリックします。 Hikari 接続プールを Gauges ダッシュボードで監視できるようになりました。
キャッシュサイズの問題
Liferay は Ehcache を使用して、ほとんどのエンティティをキャッシュします。 Mbean ツリーを使用して、特定のエンティティの構成と使用状況を検査します。 たとえば、エンティティ キャッシュで UserImplを検査します。
-
JVM タブをクリックします。 左側のナビゲーションで Mbean ツリー をクリックします。
-
下にスクロールして (またはテキスト検索して)、
CacheConfigurationセクションのUserImplを見つけます。 エンティティの現在のキャッシュ構成を確認します。
-
下にスクロールして(またはテキスト検索して)、
CacheStatisticsセクションのUserImplを見つけます。 エンティティの現在のキャッシュ使用率を確認します。
エンティティの検査に基づいて、 キャッシュ構成に必要な変更を加えます。
キャッシュをクリアすることも可能です。 Liferayで、 コントロールパネル → サーバー管理に移動します。 キャッシュのクリアは、「リソース」タブで行えます。
カスタムSQLクエリ
カスタム クエリはキャッシュされないため、トランザクションに長い時間が必要になる場合があります。 カスタム クエリがシステムに与える影響を確認するには、上記の 高価な SQL クエリ を参照してください。
大きなテーブル
時間が経つにつれて、Liferay データベース テーブルは大きくなる可能性があります。 これにより、トランザクションの速度が低下する可能性もあります。 いくつかの例を挙げると
Audit_AuditEvent- ログインなどの監査イベントに関連するテーブルOAuth2Authorization- 認可に関するテーブルSamlSpAuthRequest、SamlSpMessage、SamlSpSession- SAML認証に関連するテーブルUserNotificationEvent- 通知に関連するテーブル
パフォーマンスを向上させるには、 データベースプルーニング を検討してください。
同時実行の問題
CPU 使用率が低いにもかかわらず、一部のトランザクションが遅いと思われる場合は、同期されたリソースの同時実行性の問題が発生している可能性があります。 Glowroot の トランザクション タブに移動します。 左側のメニューで特定の取引を選択します。 ダッシュボードを下にスクロールして JVM スレッド セクションに移動し、トランザクションを検査します。

CPU時間: 計算に費やされた時間。
ブロック時間: スレッドがブロックされ、同期メカニズムを待機している可能性のある時間。
待機時間: スレッドがトランザクションを完了するまで待機した時間。
トランザクションがブロックされているか、長時間待機しているかどうかを確認します。
バックエンドサービスの遅さ
トランザクションの遅延は、外部バックエンド サービスの遅延または応答の遅延によって発生している可能性があります。 上記の 同時実行の問題 と同様に、トランザクション ダッシュボードを使用してバックエンド サービスのトランザクションを検査します。 サービスの構成にいくつかの変更を加える必要がある場合があります。
長いガベージコレクション時間
Glowroot ゲージを使用して、ガベージ コレクションを監視し、異常に長い時間がないか確認します。 JVM タブに移動し、左側のメニューで ゲージ をクリックします。 下にスクロールして、表示するガベージコレクター CollectionTime 属性を選択します。

メタスペースのメモリ不足エラー
メタスペースのサイズは、アプリケーション サーバーを構成するときに設定されます。 JVM が設定されているよりも多くのメモリを要求しようとすると、クラッシュが発生する可能性があります。 Glowroot ゲージを使用してメタスペースの使用状況を検査します。 JVM タブに移動し、左側のメニューで ゲージ をクリックします。 下にスクロールして、ガベージコレクター CollectionTime 属性を選択します。 下にスクロールして、表示する java Metaspace 属性を選択します。
遅いまたは高価なコード
Glowroot を使用して、コードの特定のセクションにパフォーマンスの問題があるかどうかを分析します。 取引 タブに移動します。 検査する特定のトランザクションを選択し、トランザクション パネルで スレッド プロファイル をクリックします。 スレッド プロファイルには、トランザクションのスレッド スタックが表示されます。
このパネルからフレーム グラフをレンダリングすることもできます。 フレームグラフを表示をクリックします。
![フレーム グラフをレンダリングするには、[フレーム グラフの表示] をクリックします。](https://resources.learn.liferay.com/images/dxp/latest/en/security-and-administration/administration/using-glowroot-with-liferay/troubleshooting-liferay-performance-issues-with-glowroot/images/06.png)
フレーム グラフには、スタック トレースの視覚化が表示されます。 要素の上にマウスを置くと、各方法の詳細が表示されます。
計測器の設定
インストルメンテーションを構成することで、任意のメソッド呼び出しを個別のトランザクションとしてキャプチャします。 新しいインストルメンテーションを作成するには、
-
構成 → インストルメンテーションに移動します。 新規追加をクリックします。
-
クラス名とメソッド名を入力します。 キャプチャする内容を選択し、特定のニーズに基づいて詳細を入力します。
-
追加をクリックします。 新しい取引は、 取引 タブの下に表示されます。
詳細については、 Glowroot インストルメンテーション を参照してください。
誤報
トランザクションが遅い場合、システムエラーが発生している可能性があります。 ただし、それが予想されるシナリオもいくつかあります。 たとえば、Liferay を初めて起動すると、時間のかかる大きな SQL クエリが表示されることがあります。 キャッシュが空の長いアイドル期間の後にも、トランザクションの速度低下が発生する可能性があります。 JSP リクエストも低速トランザクションとして表示される可能性があります。 JSP は実行時にコンパイルされるため、JSP リクエストの数が多いと速度が低下する可能性があります。