JVM監視ベンダのPlumbrは,同社のフラッグシッププロダクトにスロークエリ検出機能を追加した。これによってPlumbrは,4種類の問題を検出可能なことになる。
- メモリリーク
- 不効率なガベージコレクション
- スレッドロック
- 負荷の高いJDBC操作
同社でプロジェクトマネージャを務めるIvo Mägi氏は,自身のブログで次のように述べている。
今回ローンチされたソリューションでは,取得した必要な情報すべてを同一ページに配置することで,運用担当者と開発者を支援します。負荷の大きなJDBCオペレーションは,すべてPlumbrが監視します。ツールを使って影響分析を行い,別のデータベース監視ツールで問題のあるクエリを見つけ出し,手作業でその操作の構成と実行をしているJavaコードを調べる,という手順を踏む必要はもうありません。
Plumbrではこれらすべての情報が監視され,次のスクリーンショットのように集約されます。この例ではPlumbrが次のことを行っています。
- スレッドを約9秒間ブロックしている,負荷の高いJDBC操作を検出しました。
- これが周期的な問題であることを確認しました (ほぼ同じオペレーションが全体で127回発生し,合計で23分31秒間の停止時間を発生させている)。
- まったく同じSQLクエリの実行時に,待ち時間が発生していることを確認しました。
上のようなJDBCの速度低下の根本原因を見つける上で,Plumbrは核心的な情報を提供してくれる。詳しく見れば,問題の原因は74行のJpaProblemHistoryDao.findAccountProblems()が呼び出しているPrepared Statementにあることが分かる。
この新機能をテストするために,300社を越える企業の大規模なデータサンプルを対象として,5週間にわたるプライベートベータ解析を行ったと,同社では述べている。
Plumbr JDBC MonitoringはOracle, MySQL, Postgres, MS SQL Serverに対応する。IBM DB2とSQLiteのサポートは数ヶ月以内にリリースされる予定だ。将来的にはNoSQLデータベースのサポートを追加する予定もある。
InfoQはPlumbrの製品開発責任者であるIvo Mägi氏(同社の共同創業者)に話を聞いた。
InfoQ: PlumbrはCloud FoundryやHerokuのような,クラウド上のインストールでも使用できるのでしょうか?
Java Agentをサポートしていれば,どのクラウドプロバイダでも使用可能です。 Java AgentはJVMでバイトコードを計測するための標準的なアプローチで,監視ツールがアプリケーションの状態を確認する手段としてよく利用されます。
InfoQ: いくつかのアプリケーションやインスタンスを同時に監視して(例えばマイクロサービス環境で),その結果を集計することは可能ですか?
同一アプリケーションの複数のインスタンスを監視することも,もちろん可能です。検出された問題を根本原因に基づいて集約することで,影響分析をよりスムーズに行うことができます。
InfoQ: パフォーマンス計測の分野にはたくさんの競合製品がありますが,そういった集団からの差別化はどのようにしていますか?
大きな違いは,障害の発生したサービスと根本原因を自動的にリンクできることです。状況を表層的に捉えられる競合ツールはたくさんありますが,その原因となったソースコードの1行を特定できることが,私たちのツールの大きな特徴です。
InfoQ: 今後の展開について教えてください。
負荷の大きなJDBC操作の検出に向けて,長い道程を一歩踏み出したところです。最終的にPlumbrは,パフォーマンス上のすべての問題について,根本原因に関連する情報を提供できるようになります。Plumbrでアプリケーションを監視することによって,パフォーマンスインシデントに対するMTTR(Mean Time to Resolution/平均解消時間)の大幅に削減できます。