Javaプロファイラの手引き

Javaプロファイラーのガイド

1. 概要

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

Javaプロファイラーはmonitors Java bytecode constructs and operations at the JVM levelのツールです。 これらのコード構成と操作には、オブジェクトの作成、反復実行(再帰呼び出しを含む)、メソッド実行、スレッド実行、ガベージコレクションが含まれます。

この記事では、主なJavaプロファイラー(JProfilerYourKitJava VisualVM、およびNetbeans Profiler)について説明します。

2. JProfiler

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

この情報により、基になるシステムで最適化、排除、または変更する必要があるものを簡単に知ることができます。

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

ほとんどのプロファイラーと同様に、ローカルおよびリモートの両方のアプリケーションにこのツールを使用できます。 これは、profile Java applications running on remote machines without having to install anything on themが可能であることを意味します。

JProfilerはadvanced profiling for both SQL and NoSQL databasesも提供します。 JDBC、JPA / Hibernate、MongoDB、Casandra、およびHBaseデータベースのプロファイリングをサポートします。

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

call tree of interactions with our databaseについて学びたいと思っていて、connections that may be leakedを見ると、JProfilerはこれをうまく処理します。

ライブメモリは、see current memory usage by our applicationを可能にするJProfilerの機能の1つです。 オブジェクトの宣言とインスタンスまたは完全な呼び出しツリーのメモリ使用量を表示できます。

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

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

JProfilerは、Eclipse、NetBeans、IntelliJなどのintegration with popular IDEsをサポートします。 navigate from snapshot to source codeにすることも可能です!

3. YourKit

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

JProfilerと同様に、YourKitには、スレッド、ガベージコレクション、メモリ使用量、およびメモリリークをsupport for local and remote profiling via ssh tunnelingで視覚化するためのコア機能があります。

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

YourKitは、profile thrown exceptionsにしたいときにも役立ちます。 スローされた例外のタイプと各例外が発生した回数を簡単に見つけることができます。

YourKitには、スレッド内のメソッドやサブツリーなどの興味深いCPU profiling feature that allows focused profiling on certain areas of our codeがあります。 これは、what-if機能により条件付きプロファイリングを可能にするため、非常に強力です。

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

YourKitでprofile SQL, and NoSQL database callsすることもできます。 実行された実際のクエリのビューも提供します。

これは技術的な考慮事項ではありませんが、YourKitの寛容なライセンスモデルは、シングルライセンスの購入だけでなく、マルチユーザーチームや分散チームにも適しています。

4. Java VisualVM

Java VisualVMは、Javaアプリケーション用の簡素化された堅牢なプロファイリングツールです。 デフォルトでは、このツールはbundled with the Java Development Kit(JDK)です。 その操作は、JConsolejstatjstackjinfojmapなどのJDKで提供される他のスタンドアロンツールに依存しています。

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

Java VisualVMの興味深い利点の1つは、extend it to develop new functionalities as pluginsを実行できることです。 次に、これらのプラグインをJavaVisualVMの組み込みアップデートセンターに追加できます。

Java VisualVMは、local and remote profilingだけでなく、メモリとCPUのプロファイリングもサポートします。 Connecting to remote applications requires providing credentials(必要に応じてホスト名/ IPとパスワード)but does not provide support for ssh tunnelingreal-time profiling with instant updatesを有効にすることも選択できます(通常は2秒ごと)。

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

 

Java VisualVMのスナップショット機能を使用すると、take snapshots of profiling sessions for later analysisを実行できます。

5. NetBeansプロファイラ

NetBeansプロファイラはbundled with Oracle’s open source NetBeans IDEです。

このプロファイラーはshares a lot of similarities with Java VisualVMですが、すべてを1つのプログラム(IDE +プロファイラー)にラップする場合に適しています。

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

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

Netbeansプロファイラもgood choice for lightweight development and profilingです。 NetBeans Profilerは、プロファイリングセッションの構成と制御、および結果の表示のための単一のウィンドウを提供します。 how often garbage collection occursを知るというユニークな機能を提供します。

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

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

7. 結論

この記事では、プロファイリングとJavaプロファイラーについて説明しました。 各プロファイラーの機能と、あるプロファイラーが他のプロファイラーよりも優れている可能性があることを示しています。

多くのJavaプロファイラーが利用可能であり、一部には固有の特性があります。 この記事で説明したように、使用するJavaプロファイラーの選択は、開発者によるツールの選択、必要な分析のレベル、およびプロファイラーの機能に大きく依存します。