一、概述
定位系统问题知识和经验是关键、数据是依据、工具是运用知识处理数据的手段。
数据包括:
1)运行日志。
2)异常堆栈。
3)GC日志。
4)线程快照。
5)堆转储快照。
二、jps:虚拟机进程状况工具
JVM Process Staus Tool
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟唯一ID。
jps命令格式:
jps [ options ] [ hostid ]
二、jstat:虚拟机统计信息监视工具
1、JVM Statistics Monitoring Tool
2、用于监视虚拟机各种运行状态信息的命令行工具。
3、它可以显示本机或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
4、jstat命令格式:
jstat [ option vmid [interval[s|ms] [count]] ]
5、在本机的虚拟机进程中,VMID和LVMID是一致的。如果是远程虚拟机进程,那VMID的格式应当是:
[protocol:][//]lvmid[@hostname[:port]/servername]
6、interval:查询间隔,count:查询次数,如果省略这2个参数,说明只查询 一次。
7、命令实例:没250毫秒查询一次2764垃圾收集情况,一共查询20次,那命令是:
jstat -gc 2764 250 20
8、option分为3类:类装载、垃圾收集、运行期编译
三、jinfo:Java配置信息工具
1.Configuration Info for java
2.实时的查看和调整虚拟机各项参数。
3.jinfo命令格式:jinfo [ option ] pid
四、jmap:Java内存映射工具
1.Memory map for java。
2.用于生成堆转储快照。(heapdump和dump文件)
3.查询finalize执行队列,java堆和永久代的详细信息,如控件使用率,当前用的是哪种收集器等。
4.jmap命令格式:
jmap [ option ] vmid
五、jhat:虚拟机堆转储快照分析工具
1.jhat和jmap搭配使用。
2.一般不实用该工具:
1)一般不会在应用程序的服务器上直接分析dump文件。即便这么做也会将dump文件复制到其他机器上分析。
2)jhat分析能力比较简陋。
六、jstack:java堆栈跟踪对象
1.用于生成虚拟机当前时刻的线程快照,(一般称为javacore文件或者threaddump文件)。
2.线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成现场快照的主要目的是定位线程出现长时间停顿的原因。如线程死锁,死循环,请求外部资源导致的等到时间过长的常见原因。
3.jstack命令格式:
jstack [ option ] vmid
七、HSDIS:JIT生成代码反汇编
1.随着技术的发展,虚拟机真正的细节实现已渐渐和虚拟机规范锁描述的内容常产生了越来越大的差距,虚拟机规范中的描述逐步成了虚拟机实现的“概念模型”,---------即实现只能保证规范实现等效。
2.基于以上原因,我们在分析虚拟机的执行语义问题(虚拟机是怎么做的,性能如何)时,在字节码层面上分析就没有什么意义了,需要通过其他方式实现。
3.HSDIS是sun官方推荐的HotSpot 虚拟机JIT编译代码的反汇编插件,它包含在HotSpot虚拟机的源码中,但是没有提供编译后的程序。
八、JDK的可视化工具----jconsole
1.JConsole,Java Monitoring and Management Console,是一种基于JMX的可视化监视、管理工具。