JDK工具

四、jinfo: Java配置信息工具

 

jinfo 的作用是实时地查看和调整虚拟各项参数.使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外, 就只能使用jinfo的-flag选项进行查询了(如果只限于JDK1.6或者以上版本的话,使用java -XX:+PrintFlagsFinal查看参数默认值也是一个很好的选择), jinfo还可以使用-sysprops选项把虚拟机进程里的System.getProperties()的内容打印出来,JDK1.6之后,jinfo在windows和linux平台都有提供,并且加入了运行期修改参数的能力,可以使用-flag[+|-] name或者-flag name=value修改一部分运行期可写的虚拟机参数值.JDK1.6中,jinfo对于windows平台功能仍然有较大限制,只提供了最基本的-flag选项.     

格式:

jinfo [option] pid

 

jmap: java内存映像工具

jmap命令用于生成堆转储快照(一般称为heapdump或dump文件).如果不使用jmap命令, 要想获取java堆转储快照,还有一些比较”暴力”的手段. 例如: -XX:+HeapDumpOnOutOfMemoryError参数, 可以让虚拟机在OOM异常出殃之后自动生成dump文件,又或者在Linux系统下通过Kill -3命令发送进程退出信号”吓唬” 一下虚拟机, 也能拿到dump文件.

jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率,当前用的是哪种收集器等.

和jinfo命令一样, jmap有不少功能在windows平台下都是受限的,除了生成dump文件的-dump选项和用于查看每个类的实例,空间占用统计的-histo选项在所有操作系统提供之外, 其余选项都只能在Linux/Solaris下使用.

格式:

jmap [option] vmid

选项:

-dump 生成java堆转储快照.格式为

-dump:[live,]format=b,file=<filename>,

其中live子参数说明是否只dump出存活的对象

-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法

的对象.只在Linux/Solaris平台下有效

-heap 显示堆详细信息, 如使用哪种回收器, 参数配置,分代状

况等. 只在Linux/Solaris下有效.

-histo 显示堆中对象统计信息,包括类,实例数量,合计容量

-permstat 以ClassLoader为统计口径显示永久代内存状态. 只在

Linux/Solaris下有效

-F 当虚拟机进程对-dump选项没有响应时, 可以使用这个

选项强制生成dump快照. 只在Linux/Solaris下有效

 

 

 

jhat: 虚拟机堆转储快照分析工具

jhat命令与jmap搭配使用, 用来分析jmap生成的堆转储快照. jhat内置了一个微型的http/html服务器,生成dump文件的分析结果后,可以在浏览器中查看. jhat的分析功能相对来说比较简陋, 所以使用的机会并不是很多,有很多更好的替代方案, 例如VisualVM,以及专业用于分析dump文件的eclipse memory analyzer, IBM HeapAnalyzer等工具.

 

jstack: Java堆栈跟踪工具

jstatck命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件). 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁, 死循环, 请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因. 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待着什么资源.

格式

jstatck [option] vmid

选项:

-F 当正常输出的请求不被响应时,强制输出线程堆栈

-l 除堆栈外,显示关于锁的附加信息

-m 如果调用到本地方法的话,可以显式C/C++的堆栈

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)