GlowrootによるJVMの問題のトラブルシューティング
liferay DXP 2023.Q4+/Portal 7.4 GA100+.
Glowrootは、システムの問題を素早く特定するためのダッシュボードを表示する。 Errors_タブをクリックすると、追跡されたエラーのリストが表示されます。 以下のトピックは、Java環境でよく遭遇する問題と、トラブルシューティングに役立つGlowrootの使い方のヒントです。
Javaデッドロック
デッドロックは、他のスレッドがリソースを使用しているために、複数のスレッドが処理できない場合に発生する。 アプリケーションの動作が遅くなったり、応答しなくなったりすることがあります。
デッドロックが疑われる場合は、Glowrootの JVM タブをクリックする。 左ナビゲーションメニューの Thread dump をクリックする。 出力を分析してデッドロックを見つける。
糸漏れ
スレッド漏れは、多くの新しいスレッドが作成されたにもかかわらず、そのスレッドが適切に管理されず、不要になったときにクローズされない場合に発生する。 時間の経過とともに、これらのスレッドは多くのシステムリソースを消費し、パフォーマンスに影響を与える可能性がある。
スレッドリークが疑われる場合、java.lang.OutOfMemory
エラーが指標となる可能性がある。 Glowroot の Errors タブをクリックし、エラーがないか確認する。 実行中のすべてのスレッドのリストを見るにはMBeanツリーを使う。 JVM タブをクリックし、左ナビゲーションで Mbean tree をクリックする。 java.lang
セクションまでスクロールダウンし、 Threading_をクリックします。
データベースのデッドロック
データベースのデッドロックは、2つ以上のプロセス(トランザクション)が互いにリソースの解放を待っているときに発生する。
Glowrootでトランザクションのトレースをチェックし、遅いトランザクションがないか確認する。 取引」タブをクリックします。 トランザクションパネルで、 Slow traces をクリックする。 デッドロックの可能性を特定するために、時間がかかりすぎているトランザクションを見つけるためにチャートを使用する。
データベース接続プールの問題
データベース接続の漏れは、プログラムやアプリケーションが、データベース接続が不要になった後、その接続を適切に解放またはクローズしなかった場合に発生する。 これは、利用可能なデータベース接続を枯渇させ、システムのスローダウンを引き起こす可能性がある。
Glowrootの Errors タブをクリックし、コネクションプールのタイムアウトエラーやデータベース接続のステータスを確認する。 JVM タブをクリックし、左ナビゲーションで Mbean tree_をクリックする。 com.zaxxer.hikari
セクションまでスクロールダウンし、プール(HikariPool-1)
をクリックします。 アクティブな接続数と接続待ちのスレッド数を見る。 ユースケースによっては、プールサイズを大きくする必要があるかもしれない。
ゲージダッシュボードに光接続プールを追加するには、 設定 → ゲージ に移動します。 新規追加 をクリックし、「com.zaxxer.hikari:type=Pool (HikariPool-1)`」を検索します。 全てのMbean属性を選択し、 Add_をクリックする。
JVM タブをクリックし、左メニューの Gauges をクリックします。 ゲージダッシュボードで光接続プールを監視できるようになりました。