在平时的开发当中咱们总是会遇到各种各样的问题,比如说内存透露、死锁、CPU 等。遇到问题不可怕,要害是咱们如何去排查这些谬误,隔靴搔痒才是基本。不过对于很多人来说,往往找不到这些问题的基本所在,因而这篇文章次要是让咱们把握一些工具来剖析到底是哪里呈现了问题。
在之前的文章中,次要是剖析了 JVM 的内存构造、类加载机制和垃圾回收机制。文章的程序也是循序渐进的,从这篇文章当中咱们次要是剖析 JDK 自带的工具,把实践利用于实际。
首先咱们先对几种要讲的工具进行一个概述,而后再别离剖析:
一、性能监控工具概述
工具次要是为了解决问题而生的,就是因为咱们的程序存在着一些性能问题,才有了这些工具。其实当咱们在下载实现 JDK 之后,那些工具就被 SUN 公司随之送给咱们了。
咱们能够在咱们的 JDK 装置目录,下看看会有很多这样的工具。
咱们会发现很多这样的 exe 文件,这外面有很多都是性能监控工具。咱们就抽出来几个进行解说。
工具名称
次要作用
jps(JVM Process Status Tool)
显示指定零碎中所有的 HotSpot 虚拟机过程
jstat(JVM Statistics Monitoring Tool)
收集 HotSpot 虚拟机各方面的运行数据
jinfo(Configuration Info for Java)
显示虚拟机配置信息
jmap(Memory Map for Java)
生成虚拟机的内存转储快照(heapdump 文件)
jhat(JVM Heap Dump Browser)
剖析内存转储快照,不举荐应用,耗费资源而且慢
jstack(Stack Trace for Java)
显示虚拟机的线程快照
JConsole
JMX 的可视化管理工具
VisualVM
多合一故障管理工具
常见的几个工具都曾经列出来了,还有一些其余的工具,其实用起来比 JDK 自带的还要好,我会在今后的文章中列出来。OK,咱们就一个一个去剖析一下这些工具是干嘛的,以及如何去应用的。
二、工具
1、jps: 虚拟机过程情况工具
jps 次要用来输入 JVM 中运行的过程状态信息。语法格局如下:
`jps [options] [hostid]
`
第一个参数:options
`-q 不输入类名、Jar 名和传入 main 办法的参数
-m 输入传入 main 办法的参数
-l 输入 main 类或 Jar 的全限名
-v 输入传入 JVM 的参数
`
第二个参数:hostid
主机或者是服务器的 id,如果不指定,就默认为以后的主机或者是服务器。
我是在 Windows10 零碎下测试的,当然你能够在 linux 下试验,形式是一样的,后果可能有不同。你能够抉择不同的参数选项来进行测试。关上 CMD 输出相应命令
2、jstack:堆栈跟踪工具
jstack 用于生成虚拟机以后时刻的线程快照。语法格局如下:
`jstack [option] vmid
`
第一个参数:option
选项
作用
-F
当失常输入的申请不被相应时候,强制输入线程堆栈
-l
出堆栈外,显示对于锁的附加信息
-m
如果调用本地办法的话,能够显示 C /C++ 的堆栈
第二个参数:vmid
vmid 是 Java 虚拟机 ID,在 Linux/Unix 零碎上个别就是过程 ID。
咱们间接在 CMD 中操作一下:
3、jstat: 虚拟机统计信息监控工具
jstat 监督虚拟机各种运行状态信息,能够显示本地或者是近程虚拟机过程中的类装载、内存、垃圾收集、JIT 编译等运行数据。语法格局如下:
`jstat [generalOption | outputOptions vmid [interval] [count]] ]
`
第一个参数:generalOption | outputOptions
这个参数示意的 option,代表着用户心愿查问的虚拟机信息,分为类加载、垃圾收集、运行期编译情况 3 类。
第二个参数:vmid
vmid 是 Java 虚拟机 ID,在 Linux/Unix 零碎上个别就是过程 ID。
第三个参数:interval
interval 是采样工夫距离,
第四个参数:count
count 示意的是采样数。
上面咱们就是用一下这个工具,关上咱们的 CMD,输出相应的命令:
4、jinfo:实时地查看和调整虚拟机各项参数
命令格局:
`jinfo [option] pid
`
第一个参数:option
选项
作用
-v
查看虚拟机启动时显示指定的参数列表
-flag
查看虚拟机启动时未被指定的参数的默认值
-sysprops
打印虚拟机过程的 System.getProperties() 的内容
第二个参数:pid
指定显示的过程 id。
在 CMD 中进行测试:
5、jmap:生成虚拟机的内存转储快照(heapdump 文件)
jmap(Memory Map for Java,内存映像工具),用于生成堆转存的快照,个别是 heapdump 或者 dump 文件。如果不实用 jmap 命令,能够应用 -XX:+HeapDumpOnOutOfMemoryError 参数,当虚拟机产生内存溢出的时候能够产生快照。或者应用 kill -3 pid 也能够产生。jmap 的作用并不仅仅是为了获取 dump 文件,它能够查问 finalize 执行队列,java 堆和永恒代的详细信息,如空间使用率,以后用的哪种收集器。命令格局如下:
`jmap [option] vmid
`
第一个参数:
第二个参数:vmid
vmid 是 Java 虚拟机 ID,在 Linux/Unix 零碎上个别就是过程 ID.
在 cmd 中测试:
6、jhat:剖析内存转储快照,不举荐应用,而且慢
因为这个工具性能比拟简陋,运行起来也比拟耗时,所以这个工具不举荐应用,举荐应用 MAT。
7、JConsole:JMX 的可视化管理工具
这个工具相比拟后面几个工具,使用率比拟高,很重要。它是一个 java GUI 监督工具,能够以图表化的模式显示各种数据。并可通过近程连贯监督近程的服务器 VM。用 java 写的 GUI 程序,用来监控 VM,并可监控近程的 VM,十分易用,而且性能十分强。
在 cmd 外面输出 jconsole,选则过程就能够了。(前提是在 IDE 工具先建设一个线程运行着)
而后咱们抉择了相应的选项之后,进入这个工具就会呈现上面这个界面
在下面有菜单,咱们能够抉择其中一个进行查看,就能够了,这个器具用起来很不便,也是我之前用的比拟多的工具。
8、VisualVM:多合一故障管理工具
这个工具也很牛 bility。它同 jconsole 都是一个基于图形化界面的、能够查看本地及近程的 JAVA GUI 监控工具,Jvisualvm 同 jconsole 的应用形式一样,间接在命令行打入 jvisualvm 即可启动,jvisualvm 界面更好看一些,数据更实时:
最下面也有菜单,你能够抉择不同的选项来展现。本人入手试一遍是最好的。
三、总结
这些工具就先写这么多,在文章一开始咱们其实曾经发现了,jdk 自带的工具那是超级的多,而且随着 jdk 版本的不断更新,工具还有不断加强增多的趋势,想要每一个都把握那太费时间了,咱们遇到哪些问题去搜寻一下,看看能用到哪些工具就能够了。