jvmguard 登場:本番環境での自動プロファイリング
JProfiler の開発チームから新しいオープンソースツールが登場しました。jvmguard は、組織における本番環境の JVM プロファイリングを支援します。
本番環境でのプロファイリングはリスクを伴いますが、それが問題を理解するための唯一の手段であることも少なくありません。jvmguard を使えば、プロファイリングによるキャプチャは承認と監査の対象となり、人間、自動トリガー、AI エージェントのいずれからでも開始できます。
jvmguard は JProfiler と連携しますが、その統合に限定されるわけではありません。JFR スナップショット、HPROF ヒープダンプ、スレッドダンプも記録でき、それらは他のツールで分析できます。jvmguard の基本的な考え方は、軽量シグナルは常にオンであり、ディープキャプチャは特定の条件下でのみ実行される、というものです。


本番環境でのプロファイリングの問題点
本番環境で何かが遅い場合、必要なデータは問題が発生しているマシン上にあります。多くの組織では、開発者は本番ホストへの SSH アクセスを持っていないため、jcmd を使った簡単なヒープダンプの取得すら、開発者だけで行える作業ではありません。本格的なプロファイラをアタッチすることは、通常まったく選択肢になりません。ネイティブのプロファイリングエージェントがロードされ、制御不能なオーバーヘッドが発生するおそれがあるためです。
APM ツールや継続的プロファイラは、この問題の解決には役立ちません。これらは幅広い監視データ、すなわちすべての JVM のダッシュボード、トレース、アラートを記録します。しかし、詳細な分析のためのプロファイリングスナップショットを記録することはできません。
軽量シグナルとディープキャプチャ
jvmguard は、Web UI を備えたサーバーと、監視対象の各 JVM 内で動作する Java エージェントで構成されています。エージェントはピュア Java で実装され、Java 8 以降で動作し、トランザクションとして明示的に定義されたメソッドのみをインスツルメントします。通常の運用では、軽量なデータのみを収集します。
- ヒープ、CPU、スレッド、GC などの組み込みテレメトリ
- 選択した MBean または独自のアノテーション付きメソッドからのテレメトリ
- 設定したトランザクション


ディープキャプチャはデフォルトでは記録されません。その種類は 4 つあり、いずれもオンデマンドでのみ実行されます。
- 期間を限定した JFR 記録
- HPROF 形式のヒープダンプ
- スレッドダンプ
- JProfiler スナップショット
キャプチャは、Web UI から接続済みの任意の JVM に対して手動で開始できます。結果は jvmguard のインボックスに保存され、承認されたユーザーがダウンロードできます。
トリガーによる自動キャプチャ
トリガーは VM グループに対して設定され、イベントの発生率に反応します。トリガーには 3 種類あります。
- しきい値トリガーは、テレメトリがしきい値をあまりに頻繁に超えると発火します
- ポリシートリガーは、遅い、非常に遅い、期限超過、またはエラーで終了したトランザクションが多すぎると発火します
- 接続トリガーは、接続済みの JVM の数が最小数を下回ると発火します
トリガーが発火すると、jvmguard は設定可能なアクションのリストを実行します。データ収集アクションは、影響を受けた JVM に対して JFR または JProfiler スナップショットの記録、ヒープダンプやスレッドダンプの取得を行います。通知アクションは、jvmguard のインボックスへの書き込み、メールの送信、Webhook の呼び出しを行います。
典型的な設定例としては、遅いトランザクションが多すぎるときに発火して JFR スナップショットを記録するポリシートリガーがあります。


JProfiler との統合
最も深い分析は JProfiler スナップショットから得られます。このため、サーバーは対応する JProfiler エージェントパッケージをダウンロードサイトからダウンロードし、エージェントに転送します。これは、サーバーが自発的に外部に対して行う唯一の接続であり、エアギャップ構成のサーバーでは、このパッケージをキャッシュディレクトリに事前にコピーしておくこともできます。
JProfiler エージェントは必要なときに実行中の JVM にロードされ、サンプリングによって CPU データを記録するため、本番環境でもオーバーヘッドは低く抑えられます。JProfiler の記録アクションでは、JDBC、JPA、HTTP、gRPC、Kafka、LLM 呼び出しなど、必要なサブシステムを選択できます。JVMTI エージェントは一度ロードされると、JVM を再起動するまでアンロードできませんが、アイドル時のオーバーヘッドは 1% 未満です。
AI エージェント
jvmguard には MCP サーバーが含まれています。コーディングエージェントは、人間が Web UI で行えるのと同じ操作を行えます。具体的には、利用可能な JVM の検出、テレメトリとトランザクションの読み取り、プロファイリングスナップショットのキャプチャ、そして結果の取得です。
AI エージェントに本番 JVM へのアクセスを許すには、厳格な制限が不可欠です。jvmguard は、サーバー全体に適用される読み取り専用モード、許可するキャプチャタイプを制御するグループごとのガードレール、レート制限とクールダウン、そしてすべてのエージェント操作の SIEM 互換監査レコードを提供します。
jvmguard の MCP サーバーと JProfiler の MCP サーバーは、ループを形成します。jvmguard が本番環境でスナップショットをキャプチャし、AI エージェントが JProfiler を使ってそれを分析します。
本番環境でも安全に
本番環境でのプロファイリングを安全に行えるよう、jvmguard は数多くの機能を提供しています。
- デフォルトの運用時には、制御された超低オーバーヘッドを実現。
- Admin、Profiler、Viewer の 3 つのアクセスレベルにより、1 台のサーバーを複数のチームで分割利用できます。ユーザーはローカルアカウント、LDAP、または SSO で認証し、二要素認証はデフォルトで有効になっています。
- エージェント接続は、TLS による暗号化と相互認証が可能です。
- 完全な監査ログが、誰が、いつ、何を行ったかというすべてのプロファイリング操作を記録します。
- 外部への無断通信は一切ありません。エージェントは自組織のサーバーに接続し、記録されたデータはすべてネットワーク内にとどまります。コレクター、組み込みの H2 データベース、Web UI は 1 つのプロセスで動作し、エアギャップ環境でも利用できます。
スタートガイド
これが jvmguard の初回リリースです。Windows、macOS、Linux 向けのインストーラーがダウンロードページから入手でき、ドキュメントは Web サイトで参照できます。
インストール後は、ヘッダーの「Add VMs」ボタンを使用して、各 JVM の起動コマンドに追加する -javaagent オプションを生成します。
ソースコードは GitHub で公開しています。jvmguard が役に立ちそうだと感じたら、GitHub でのスターが他の方がこのプロジェクトを見つける助けになります。