最近、大きなファイルを読み込む必要があり、メモリに読み込まれているかどうかを判断するために、jarパッケージが占有しているメモリを確認できるツールが必要になり、Baiduに付属しているJconsoleというツールを見つけました。 jdk を作成し、チュートリアルを全員と共有しました。
1. はじめに
JConsole は組み込みの Java パフォーマンス アナライザーであり、Java 5 では JConsole の導入が始まりました。コマンドラインまたは GUI シェルから実行できます。JConsole を使用すると、监控 Java 应用程序性能
と跟踪 Java 中的代码
。
Jconsole ツールは、プログラムのリソース占有要求をチェックします。jdkをインストールする場合、binディレクトリにjconsole.exeツールがあります。または、Win + Rを介してjconsole.exeと入力してjconsoleを起動します(コマンドラインから直接入力できますjconsole
)。
このツールの利点は、使用するシステム リソースが少なく、Jstat と組み合わせることで、Java メモリの変化とその変化の理由を効果的に監視できることです。プロジェクト内のメモリ リークを追跡する場合に役立ちます。
2、始めます
3. 接続
プロファイラーがポップアップすると (実行されている Java のバージョンと実行されている Java プログラムの数に応じて)、接続先のプロセス URL を求めるダイアログが表示され、さまざまなネイティブ Java プロセス (JConsole が含まれる場合もあります) がリストされる場合もあります。プロセス自体)を接続します。図に示すように:
どのプログラムを分析したい場合は、プロセスをダブルクリックします。
远程连接
この時点で、リソースの使用状況を確認し、最も基本的な機能を実現でき界面详情
ます。
1. Java プログラムの実行時に、JConsolse によって接続および分析されるように設定します。
- ローカル プログラム (JConsole を起動するコンピュータと比較して) は、パラメータを設定せずにローカルで起動された JConsole に接続できます (Java SE 6 は設定する必要がありませんが、その前にランタイム パラメータ -Dcom.sun を設定する必要があります)。管理.jmxremote)
- 認証なし接続 (次の設定は、接続ポートが 8999 であり、認証なしで接続できることを意味します)
- 参考:JMX テクノロジーを使用した監視と管理 - Java SE監視と管理ガイド
4. インターフェース表示
Java アプリケーションに接続すると、図に示すように、アプリケーションの概要を表示できます。図内の 4 つの折れ線グラフは、ヒープ メモリの使用量、システム内のスレッド数、ロードされたクラスの数、および CPU の使用量を示します。
一般に、主な焦点は内存栏
、、、、および列にあり、これらの列は特定の线程栏
問題を追跡するときに使用されます。类栏
概述栏
VM
MBeans
グラフに対してファイルを作成点击右键
したり、将来的に他のツールを使用してこれらのデータを分析したりできることは言及する価値があります。保存数据到CSV
右上隅にある JConsole の緑色の接続ステータス アイコンを使用していつでも、実行中の Java 仮想マシンを切断または再接続できます。ドロップダウン メニューから [接続] を選択し、新しい接続を作成します。実行中の任意の数の Java 仮想マシンに同時に接続できます。
1. メモリ監視
JConsole では、ヒープのサイズ、使用率、eden 領域のサイズ、survivor 領域のサイズ、永続領域のサイズなど、ヒープの詳細情報を表示できます。
“内存”
タブに切り替えると、JConsole で現在のメモリの詳細情報を表示できます。これには、ヒープメモリ全体の情報だけでなく、Eden領域、Survivor領域、Old Generationの使用状況や、非ヒープ領域であるPermanent世代の使用状況も含まれます。図に示すように、右上隅にある [Perform GC] ボタンをクリックして、アプリケーションに FullGC 操作を強制的に実行させます。
ヒープメモリと非ヒープメモリ
Java 仮想マシンは、ヒープ メモリと非ヒープ メモリという 2 種類のメモリを管理します。どちらも Java 仮想マシンの起動時に作成されます。
- ヒープ メモリは、Java VM のすべてのクラス インスタンスと配列がメモリを割り当てるランタイム データ領域です。固定サイズまたは可変サイズのヒープの場合があります。
- 非ヒープ メモリには、処理または最適化のために内部的にすべてのスレッドと JVM の間で共有されるメソッドが含まれます。クラス構造、実行中の定数プール、フィールドとメソッドのデータ、およびメソッドとコンストラクターのコードが格納されます。メソッド領域は、特定の実装に応じて、論理的にヒープの一部になります。実装によっては、Java 仮想マシンはガベージ コレクションやコンパクションを実行しない場合があります。ヒープ メモリと同様に、メソッド領域は固定サイズまたは可変サイズの場合があります。メソッド領域のメモリは連続している必要はありません。
- Java 仮想マシンは、メソッド領域に加えて、非ヒープ メモリのメモリにも属する内部処理または最適化を実行する必要がある場合があります。たとえば、ジャストインタイム (JIT) コンパイラは、Java 仮想マシンの高パフォーマンス コードから変換されたマシン コードを格納するためのメモリを必要とします。
2. スレッド監視
JConsole を使用すると、システム内のスレッド情報を簡単に確認し、デッドロックの問題を迅速に特定できます。
JConsole の「スレッド」タブを使用すると、図に示すように、開発者はプログラム内のスレッドを監視できます。JConsole はシステム内のスレッド数を表示し、画面の下部にプログラム内のすべてのスレッドを表示します。スレッド名をクリックすると、スレッドのスタック情報が表示されます。(スレッドが多すぎる場合は、下のフィルター バーに文字列を入力して、監視したいスレッドを除外できます)
统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。
「スレッド」タブには、いくつかの便利な操作が用意されています。
findMonitorDeadlockedThreads: スレッド オブジェクト モニター ロックがデッドロックされているかどうかを検出します。この操作は、デッドロックされたスレッド ID の配列を返します。
getThreadInfo: スレッド情報を返します。これには、名前、スタック トレース、モニター ロック、現在ブロックされているスレッド (存在する場合)、ロックを保持しているスレッド、およびスレッド競合統計が含まれます。
getThreadCpuTime: 指定されたスレッドによって消費された CPU 時間を返します。
「检测死锁
」ボタンをクリックすると、マルチスレッドアプリケーションのデッドロックを自動的に検出します。
3. クラスローディング
図に示すように、JConsole の「クラス」タブには、システムがロードしたクラスの数が表示され、「詳細情報」列にはアンロードされたクラスの数も表示されます。
4. 仮想マシン情報
VM 概要には、仮想マシン タイプ、仮想マシン バージョン、システム スレッド情報、オペレーティング システム メモリ情報、ヒープ情報、ガベージ コレクタ タイプ、JVM パラメータ、クラス パスなど、現在の Java アプリケーションの基本情報が表示されます。
JConsole の「VM Summary」タブには、図に示すように、仮想マシンのタイプ、バージョン、ヒープ情報、仮想マシンのパラメータなど、現在のアプリケーションの実行環境が表示されます。
5. MBean 管理
JConsole を通じて、Java アプリケーション内の Mbean を統合された方法で管理できます。
「MBean」タブでは、MBean の属性の表示または設定、MBean のメソッドの実行など、JConsole を介して MBean を管理できます。この図は、Memory の Verbose 属性が選択されている MBean の管理インターフェイスを示しています。Verbose の属性値を変更することで、プログラムの実行中に GC 操作の出力情報を動的にオンまたはオフにすることができます。
MBean には多くの種類があり、その機能は比較的強力です。一般的に使用される MBean 操作をいくつか紹介します。
6. プラグインの使用
JConsole は、基本機能に加えて、プラグイン拡張機能もサポートしています。JDK インストール ディレクトリの %JAVA_HOME%\demo\management\JTop に、組み込みの JConsole プラグインがあります。次のコマンドを使用して、JConsole にプラグインをロードさせて開始します。
JConsole が開始したら、任意の Java アプリケーションに接続すると、図に示すように JTop ページに入ることができます。
JTop プラグインは CPU 時間でソートし、CPU 時間が最も長いスレッドをテーブルの先頭に表示します。このプラグインを使用すると、開発者は最も長い CPU 時間を費やしているスレッドの名前をすばやく見つけ、スレッド スナップショットを通じてスレッド コードを見つけることができます。
JTop プラグインの完全なソース コードは、JDK インストール ディレクトリにあります。興味のある読者は、JTop のソース コードを変更して、より多くのスレッド情報を表示できます。
参考リンク
- JConsole の詳細説明: https://blog.csdn.net/D420941934/article/details/120473194
- Java を介してプログラム リソースの使用状況を表示: https://www.jb51.cc/java/3556429.html
- jconsole ツールの使用: https://www.cnblogs.com/kongzhongqijing/articles/3621441.html