あなたはJavaJDKツールであることがわかっている必要があります

JDKはJavaプログラマのためのプログラムが良いかの強力なツールの悪いパフォーマンスを実行している知っている間違いなく、監視システムのための多くの診断ツールがあります。

これらのツールは、JDKのbinディレクトリにあります。

1

JPS

Linuxのコマンドが呼ばれていてpsも、同様のJPS JDK、Javaのビュー実行中のプロセスを提供しながら、あなたは、システム上の現在のすべてのプロセスを表示することができます。

あなたは、コマンドのパラメータを見ることができます。

2

デフォルトでは、プロセスID、およびメインクラス名を含むJavaプロセスの出力を、JPS。

我々はまた、追加の情報を印刷するために追加のパラメータを渡すことができます。

例えば、モジュールの名前とパッケージの名前を印刷する-l;

3

-v Java仮想マシンに渡されたパラメータを印刷(例えば、-XX:+ UnlockExperimentalVMOptions -XX:+ UseZGC)。

4

-m印刷パラメータは、メインクラスに渡されます。

5

また-lvm使用を一緒に使用することができます。

JVMが開始したときにパラメータが使用される場合、それは、PERFDATAを格納するためのパーフォレーションメモリを作成する-XX:-UsePerfData他のプロセスの可視禁止する、JPSコマンドは、Javaプロセスことを確認することができません。

JSTAT

JSTATコマンドは、Javaプロセスを印刷するためのデータを実行しています。

6

これは、サポート-classクラスのロードに関連するデータを表示するために、-compilerそして-printcompilation情報にインタイムコンパイルを表示します。

だけでなく、-gcガベージコレクションなどに関連するデータ。

あなたは、サブコマンドとJava実行プロセスIDを指定する必要があります。

7

上の図は、二つの領域サバイバーの大きさを表すS0CとS1Cは、Cは容量、容量を意味します。

S0UとS1Uは、二つのサバイバー領域のサイズは、使用される、Uユーティリティを参照して、実用されているされています。

ECとEUは、エデン領域の容量と使用を表しています。

OCとOUは、旧地区の容量と使用を表しています。

MCとMUは、領域の容量と使用を表しています。

CCSCとはCCSUの圧縮ボリュームの大きさと空間の使用と比較的少数の使用を表しています。

YGCはYoungGCを表し、若い世代GCの数をより正確MinorGC、費やした時間のYGCTの代表と呼ばれるべき、たまたま、です。

FGC代表FullGC发生的次数,它发生在老年代,FGCT代表所用的时间。

GCT代表所有GC所占用的时间。

可以看到11次YGC只耗时0.439,而8次FGC却用了数倍时间,1.419。

现在我们已经知道每一个标记代表什么了,可以尝试一下使用更详细的gc子命令来查看对应Java进程了。

jstat命令默认执行一次只返回一次,如果我想一直监控某个Java进程,可以添加可以时间参数。

如下图,jstat -gcnew 13496 500,后面跟一个500,就说明每500ms打印一次。

8

还可以指定打印的次数,比如jstat -gcnew 13496 500 5,后面跟500 5,就说明每500ms打印一次,总共打印5次。

9

在我们查看内存区域容量变化时,如果发现老年代的使用率不断增加,就说明有大量对象无法进行回收,我们的程序出现了性能上的问题。

再比如,我们可以添加-t来打印程序运行时间Timestamp,如果GCT占据了大部分程序运行时间,或者说这个时间比在持续上升时。就说明我们程序的堆内存已经在逐步走向奔溃了。

10

Jmap

知道程序有了问题,我们就可以利用Jmap命令来分析了。

Jmap同样包括多条子命令。

11

-clstats,该子命令将打印被加载类的信息。

13

-finalizerinfo,该子命令将打印所有待 finalize 的对象。

14

-histo,该子命令将统计各个类的实例数目以及占用内存,并按照内存使用量从多至少的顺序排列。此外,-histo:live只统计堆中的存活对象。

12

-dump,该子命令将导出 Java 虚拟机堆的快照。同样,-dump:live只保存堆中的存活对象。

我们通常会利用jmap -dump:live,format=b,file=filename.bin命令,将堆中所有存活对象导出至一个文件之中。

15

-heap,该子命令将输出当前堆中的配置信息。

16

Jinfo

Jinfo命令可用来查看目标Java进程的参数。

17

Jstack

这是一个非常有用的命令,它可以用来打印目标 Java 进程中各个线程的栈轨迹,以及这些线程所持有的锁,所以这个命令可以帮助我们处理死锁。

シンプルなコードはデッドロックになるの書き込みましょう。

18

プログラムPaozhaopaozheデッドロックが発生します。

19

私たちは見てjstackを使用します。

20

私たちは、スレッド見ることができますThread-a待機して待って、String.classにロックを施錠しましたMain.class

スレッドはThread-b、それがロックされてMain.class待機して待っています、String.class

Jstackでも発生し、デッドロックの原因を見つける私たちを助けます。

21

おすすめ

転載: www.cnblogs.com/LexMoon/p/jdktools.html
おすすめ