記事のソース:https://blog.csdn.net/a19881029/article/details/8432368
jvisualvmでできること
メモリリークの監視、ガベージコレクションの追跡、メモリの実行、CPU分析、スレッド分析...
jvisualvmgはjdk1.6(jreではない)より上のバージョンに統合されています。独自の操作には最低限のjdk1.6バージョンが必要ですが、jdk1.4以降で実行されているJavaプログラムを監視できます
説明として、jdk1.6update45(jdk1.6update45に付属するjvisualvm)を取り上げます。もちろん、個別のjvisualvmを個別にダウンロードすることもできます。jdkが正常にインストールされたら、jdk binディレクトリに移動してjvisualvm.exeを実行します。
インターネット上の一部の人々は、jvisualvmはntfsハードディスクフォーマットをサポートしていないと言っています(すべてが良いとは言えず、何が悪いのかは言いませんでした)。とにかく、私がそれを使用するのはごく普通のことです。何があっても、最初に解決策を書き留めてください。
jvisualvm.exeへのショートカットを作成し、ショートカットを右クリックしてプロパティを選択し、「ターゲット」列に「-XX:+ PerfBypassFileSystemCheck」を追加します
プログラムが実行されると、マシンで実行されているJavaプログラムが自動的に監視されます([ローカル]タブで、リモートサーバーのJavaプログラムを個別に構成する必要があります)。ダウンロードされたjvisualvmの場合、解凍後、binディレクトリでjvisualvm.exeを実行します。
「ローカル」タブの最初のVisualVMはjvisualvm自体の監視であり、消費されるリソースがまだ非常に少ないことがわかります。2番目はネイティブのEclipseです。
監視項目は、概要、監視、スレッド、サンプラーに分かれています。
1.概要(jvm起動パラメーター、システムパラメーター)
あなたは日食の起動パラメータを見ることができます
(これらの起動パラメーターにより、プログラムにメモリオーバーフローがあるかどうかを判断できます)
2.モニター
左上:CPU使用率、GCステータスの監視
右上:ヒープ使用率、永久メモリ領域の使用率
左下:クラスの監視
右下:スレッドの監視
performGC:gcの詳細な動作ステータス
HeapDump:ヒープの詳細なステータス(ヒープとその中のすべてのクラスの概要を表示し、特定のクラスをクリックしてこのクラスのステータスを表示できます)
3.スレッド
スレッドの名前と実行ステータスを表示できます。これはマルチスレッドのデバッグに不可欠であり、スレッドをクリックしてこのスレッドの詳細な実行ステータスを表示できます。
サーバー上のTomcatを監視する
tomcat設定ファイルcatalina.shは以下を追加します:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.58.164"
パラメータの説明:
指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
Dcom.sun.management.jmxremote.port=9998
指定了JMX是否启用ssl
Dcom.sun.management.jmxremote.authenticate=false
指定了JMX是否启用鉴权(需要用户名,密码鉴权)
Dcom.sun.management.jmxremote.authenticate=false
指定了服务器主机名
Djava.rmi.server.hostname=192.168.58.164
ホスト名を入力してください:
右クリックしてjmx接続を作成します。
ポート番号を入力するだけです:
設定が完了しました:
サーバー上のJavaプログラムを監視する
Tomcatの監視と比較すると、はるかに面倒です。事前に($ {java_home} / binディレクトリの下で)jstatdサービスを開始する必要があります。
jstatdは、作成から破棄までのJVMのリソース占有を監視し、リモート監視インターフェースを提供するRMI(Remote Method Invocation)サーバープログラムです。これはデーモンプログラム(バックグラウンドプロセス)です。リモート監視ソフトウェアがローカルでは、jstatdは常に実行されている必要があります。
jstatdを実行するには、-J-Djava.security.policy = ***を介してセキュリティポリシーを指定する必要があるため、セキュリティポリシーを指定するサーバー上にファイルjstatd.all.policyを作成する必要があります($ {java_home} / binディレクトリに配置します)以下)、ファイルの内容は次のとおりです。
grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" {
permission java.security.AllPermission;
};
次に、このポリシーファイルを使用してjstatdサービスを開始します。
[123@123 bin]$ pwd
/home/123/123/jdk1.5.0_15/bin
[123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &
jstatdサービスは監視プロセス中は常に実行されている必要があるため、&が追加されます。ログが必要な場合は、次のものも使用できます。
./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true
次に、jvisualvmでサーバー上で実行されているjavaプログラムを構成および監視できます。これは、jvisualvmでtomcatサーバーを構成および監視するのと同じです。
リモート監視Javaプログラムの構成時にjvisualvmがエラーを報告する場合があることに注意することが重要です。
クリックしてエラーの詳細を表示します。
ホストへの接続が拒否されました:127.0.0.1予備判断はホスト名に関連しています
[123@123 bin]# hostname -i
127.0.0.1
[123@123 bin]# hostname 192.168.58.168
jstatdサービスを変更した後、jstatdサービスを再起動します(インターネット上の多くの人々は、ホストの/ etc / hostsファイルを変更する必要があると言いますが、/ etc / hostsファイルを自分で変更することは効果がないことをテストしました。ホスト名を変更する必要があります)
ホスト名を入力してください:
ここで、jstatd接続を追加することを選択します。
デフォルト構成を選択するだけです(デフォルトではポート1099が使用されます)。
[OK]をクリックすると、168のすべてのJavaプログラムが自動的にリストされます。
PS:
プラグインはjvisualvmにインストールすることもできます。具体的な手順は、ツール->プラグイン->移動可能なプラグインです。非常に便利なプラグインVisualGCをお勧めします
このプラグインをインストールすると、新しい監視項目Visual GCが追加され、仮想マシンのメモリの各領域の使用状況を確認できます