Java的命令行工具
工具:位于JDK的bin目录中
这些程序体积都非常小,因为这些命令行工具只是jdk/lib/tools.jar类库的一层薄包装而已,主要的功能代码是在tools类库中实现的:
jps:虚拟机进程状况工具。
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(LVMID),可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中的注册的主机名
命令格式:jps [ options ] [ hostid ]
执行样例:
相关选项:
-q:只输出LVMID,省略主类的名称
-m:输出虚拟机进程启动时传递给主类main()函数的参数
-l:输出主类的全名,如果进程执行的是jar包,输出jar路径
-v::输出虚拟机进程启动时JVM参数
jstat:虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息,可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
命令格式:jstat [ option vmid [ interval [ s|ms ] [ count ] ] ](VMID:虚拟机进程 interval:查询间隔 count:查询次数 如果省略代表只查询一次)
执行样例:
选项option代表用户希望查询的虚拟机信息,主要分为三类:类装载、垃圾收集、运行期编译状况
具体选项及其作用:
-class:监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc:监视Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity:监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大最小空间
-gcutil:监视内容与-gc基本相同,但输出主要关注已使用空间占可用空间的百分比
-gccause:与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew:监视新生代GC状况
-gcnewcapacity:监视内容与-gcnew基本相同,但输出主要关注使用到的最大最小空间
-gcold:监视老年代GC状况
-gcoldcapacity:监视内容与-gcold基本相同,但输出主要关注使用到的最大最小空间
-gcpermcapacity:输出永久代使用到的最大最小空间
-compiler:输出JIT编译器编译过的方法、耗时等信息
-printcompilation:输出已经被JIT编译的方法
jinfo:java配置信息工具
用于实时地查看和调整虚拟机各项参数。
命令格式:jinfo [ option ] pid
相关选项:
-flag 查询系统参数默认值
-v 查看虚拟机启动时显示指定的参数列表
-flag [ +|- ] name或者-flag name=value 可以修改一部分运行期可写的虚拟机参数值
执行样例:
jmap:Java内存映像工具
用于生成堆转储快照(一般称为heapdump或dump文件),还可以查询finalize执行队列、Java堆和永久代的详细详细。
命令格式:jmap [ option ] vmid
相关选项:
-dump:生成Java堆转储快照,格式为:-dump:[live ]format=b, file=
-finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效
-heap:显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效
-histo:显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat:以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效
-F:当虚拟机进程对-dump选项没有响应时,可用这个选项强制生成dump快照。只在Linux/Solaris平台下有效
执行样例:
jhat:虚拟机堆转储快照分析工具
与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。但 一般不会直接用jhat命令直接分析dump文件,因为分析工作比较耗时且耗费硬件资源,所以一般会比dump文件复制到其他机器运行。各个虚拟机产生的映像文件格式并不一致,所以分析工具不能通用
执行样例:
屏幕提示“Server is ready”后,在浏览器输入http://localhost:7000/就可以看到分析结果
jstack:Java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者Javacore文件)。线程快照就是当前虚拟机内每一条线程正在正在执行的方法堆栈的集合。生成线程快照的主要目的就是定位线程出现长时间停顿的常见原因,通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者调用什么资源。
相关选项:
-F:当正常输出的请求不被响应时,强制输出线程堆栈
-l:除堆栈外,显示关于锁的附加信息
-m:如果调用本地方法的话,可以显示C/C++的堆栈
执行样例:
HSDIS:JIT生成代码反汇编的插件
用于将HotSpot虚拟机JIT编译器动态生成的本地代码还原为汇编代码输出,同时生成大量的注释