1. 概要

実行するだけのコードを書くだけでは不十分な場合があります。メモリの割り当て方法、あるコーディングアプローチを別のコーディングアプローチに使用した場合の結果、同時実行の影響、パフォーマンスを向上させる領域など、内部で何が起こっているかを知りたい場合があります。 、など。 これにはプロファイラーを使用できます。

Java Profilerは、Javaバイトコードの構成と操作をJVMレベルで監視するツールです。 これらのコード構造と操作には、オブジェクトの作成、反復実行(再帰呼び出しを含む)、メソッド実行、スレッド実行、およびガベージコレクションが含まれます。

In this article, we’ll be discussing the main Java Profilers: JProfiler, YourKit, Java VisualVM, the Netbeans Profiler, and the IntelliJ Profiler.

2. JProfiler

JProfilerは、多くの開発者にとって最高の選択肢です。 直感的なUIを備えたJProfilerは、システムパフォーマンス、メモリ使用量、潜在的なメモリリーク、およびスレッドプロファイリングを表示するためのインターフェイスを提供します。

この情報を使用して、基盤となるシステムで何を最適化、排除、または変更する必要があるかを簡単に知ることができます。

This product requires purchasing a license, but also offers a free trial.

JProfilerのインターフェースは次のようになります。

機能を備えたJProfiler概要インターフェイス

ほとんどのプロファイラーと同様に、このツールはローカルアプリケーションとリモートアプリケーションの両方に使用できます。 これは、リモートマシン上で実行されているアプリケーションをプロファイルすることが可能であることを意味します。それらに何もインストールする必要はありません

JProfilerは、SQLデータベースとNoSQLデータベースの両方に高度なプロファイリングを提供します。 JDBC、JPA / Hibernate、MongoDB、Casandra、およびHBaseデータベースのプロファイリングに特定のサポートを提供します。

以下のスクリーンショットは、現在の接続のリストを含むJDBCプロービングインターフェイスを示しています。

JProfilerデータベースプロービングビュー

If we are keen on learning about the call tree of interactions with our database and seeing connections that may be leaked, JProfiler nicely handles this.

ライブメモリはJProfilerの機能の1つであり、アプリケーションによる現在のメモリ使用量を確認できます。 オブジェクト宣言とインスタンス、または完全な呼び出しツリーのメモリ使用量を表示できます。

割り当て呼び出しツリーの場合、ライブオブジェクト、ガベージコレクションされたオブジェクト、またはその両方の呼び出しツリーを表示するように選択できます。 また、この割り当てツリーを特定のクラスまたはパッケージ、あるいはすべてのクラスに割り当てるかどうかを決定することもできます。

以下の画面は、インスタンス数を持つすべてのオブジェクトによるライブメモリ使用量を示しています。

JProfilerライブメモリビュー

JProfilerは、Eclipse、NetBeans、IntelliJなどの一般的なIDEとの統合をサポートしています。 スナップショットからソースコードに移動することも可能です!

3. YourKit

YourKit Java Profilerは多くの異なるプラットフォームで実行され、サポートされているオペレーティングシステム(Windows、MacOS、Linux、Solaris、FreeBSDなど)ごとに個別のインストールを提供します。

JProfilerと同様に、YourKitには、スレッド、ガベージコレクション、メモリ使用量、およびメモリリークを視覚化するためのコア機能があり、sshトンネリングを介したローカルおよびリモートプロファイリングのサポートがあります。

YourKit offers both paid licenses for commercial use, with a  free trial, and lower cost or free licenses for non-commercial use.

Tomcatサーバーアプリケーションのメモリプロファイリング結果を簡単に見てみましょう。

TomcatサーバーアプリケーションのYourKitJavaProfilerメモリプロファイリング

YourKitは、スローされた例外プロファイルする場合にも役立ちます。 スローされた例外のタイプと、各例外が発生した回数を簡単に確認できます。

YourKitには興味深いCPUプロファイリング機能があり、スレッド内のメソッドやサブツリーなど、コードの特定の領域に焦点を絞ったプロファイリングが可能です。 これは、what-if機能による条件付きプロファイリングを可能にするため、非常に強力です。

図5に、スレッドプロファイリングインターフェイスの例を示します。

図5。 YourKitJavaProfilerスレッドプロファイリングインターフェイス

YourKitを使用してプロファイルSQLおよびNoSQLデータベース呼び出しを行うこともできます。 実行された実際のクエリのビューも提供します。

これは技術的な考慮事項ではありませんが、YourKitのパーミッシブライセンスモデルは、マルチユーザーまたは分散チーム、およびシングルライセンスの購入に適しています。

4. Java VisualVM

Java VisualVMは、Javaアプリケーション用の簡素化された堅牢なプロファイリングツールです。 This is a free, open-source profiler.

This tool was bundled with the Java Development Kit (JDK) up to JDK 8, but was removed in JDK 9 and is now distributed as a standalone tool: VisualVM Download.

Its operation relies on other standalone tools provided in the JDK, such as JConsole, jstat, jstack, jinfo, and jmap.

以下に、JavaVisualVMを使用した進行中のプロファイリングセッションの簡単な概要インターフェイスを示します。

JavaVisualVMローカルTomcatサーバーアプリのプロファイリング

Java VisualVMの興味深い利点の1つは、プラグインとして新しい機能を開発するために拡張できることです。 次に、これらのプラグインをJavaVisualVMの組み込みの更新センターに追加できます。

Java VisualVMは、ローカルおよびリモートプロファイリング、およびメモリとCPUプロファイリングをサポートします。 リモートアプリケーションに接続するには、資格情報(必要に応じてホスト名/ IPとパスワード)を提供する必要がありますが、sshトンネリングはサポートされていません。 また、インスタントアップデートによるリアルタイムプロファイリング(通常は2秒ごと)を有効にすることもできます。

以下に、JavaVisualVMを使用してプロファイルされたJavaアプリケーションのメモリの見通しを示します。

JavaVisualVMメモリヒープヒストグラム

 

Java VisualVMのスナップショット機能を使用すると、後で分析するためにプロファイリングセッションのスナップショットを取得できます

5. NetBeansプロファイラ

The NetBeans Profiler is bundled with Oracle’s open-source NetBeans IDE.

このプロファイラーはJavaVisualVMと多くの類似点を共有していますが、すべてを1つのプログラム(IDE +プロファイラー)にラップする場合に適しています。

上記で説明した他のすべてのプロファイラーは、IDE統合を強化するためのプラグインを提供します。

以下のスクリーンショットは、NetBeansProfilerインターフェースの例を示しています。

NetbeansProfilerテレメトリインターフェイス

Netbeans Profilerは、軽量の開発とプロファイリングにも適しています。 NetBeans Profilerは、プロファイリングセッションを設定および制御し、結果を表示するための単一のウィンドウを提供します。 ガベージコレクションが発生する頻度を知るという独自の機能を提供します。

6. IntelliJ Profiler

IntelliJ Profiler is a simple, yet powerful tool for CPU and memory allocations profiling. It combines the power of two popular Java profilers: JFR and Async profiler.

While there are some advanced features, the main focus is on ease of use. IntelliJ Profiler allows you to get started in a few clicks without any kind of configuration while providing helpful features to assist you in your day-to-day work as a developer.

As part of IntelliJ IDEA Ultimate, IntelliJ Profiler can be attached to a process with a single click and we can navigate between a snapshot and the source code as if they were one. Its other features, like differential flame graphs, allow us to visually assess the performance of different approaches and get insights into the runtime operations quickly and efficiently:

IntelliJ Profiler works on Windows, Linux, and macOS.

7. その他のソリッドプロファイラー

ここでのいくつかの名誉ある言及は、 Java Mission Control New Relic 、および prefix Stackify から)–これらは全体的に市場シェアが少ないです。しかし、間違いなく、言及する価値があります。 たとえば、Stackifyのプレフィックスは優れた軽量プロファイリングツールであり、Javaアプリケーションだけでなく他のWebアプリケーションのプロファイリングにも最適です。

8. 結論

この記事では、プロファイリングとJavaプロファイラーについて説明しました。 各プロファイラーの機能と、相互に選択できる可能性のあるものを確認しました。

多くのJavaプロファイラーが利用可能で、いくつかは独自の特性を備えています。 The choice of which Java profiler to use, as we’ve seen in this article, is mostly dependent on a developer’s selection of tools, the level of analysis required, and the features of the profiler.