简介
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段,这里的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照(heapdump/hprof文件)等 , 这些jvm工具可以加快我们分析数据、定位解决问题的速度
主要实战使用这些jvm工具, 帮助定位问题。
jps 进程状况工具
JVM Process Status Tool,用于显示系统内所有的 HotSpot 虚拟机进程。
选项 | 作用 |
---|---|
-q | 只输出LVMID, 省略主类的名称 |
-m | 输出虚拟机进程启动时传递参数主类main()的参数 |
-l | 输出主类的全名,如果进程执行的jar包,输出jar路径 |
-v | 输出虚拟机进程启动时jvm参数 |
jps主要用于查看java进程, 在平常使用的次数最多, 经常使用方式
1:
jps -m
2:
jps -lvm
jstat 虚拟机统计信息监视工具
JVM Statistics Monitoring Tool,用于收集 HotSpot 各方面的运行数据。
选项 | 作用 |
---|---|
-class | 监视类装载,卸载数量,总空间以及装载所耗费的时间 |
-gc | 监视java堆状况,包括Eden区,两个survivor区,老年代,永久代的容量,已用空间,GC时间合计等信息 |
-gccapacity | 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计 |
-gcutil | 监视内容和-gc基本相同,但输出主要关注已使用的空间占总空间的百分比 |
-gccuse | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 新生代与其相应的内存空间的统计 |
-gcold | 年老代和永生代行为统计 |
-gcoldcapacity | 年老代行为统计 |
-gcpermcapacity | 永生代行为统计 |
主要用来监视统计信息
常用的几种方式
1: jstat -gc 25579 250 20 (注释:25579是进程的id,250 代表250毫秒查询一次,20代表一共查询20次 )
2: jstat -gcutil pid
与 -gc 类似,更关注已使用空间占比
查询结果表明: 这台服务器的新生代Eden区(E,表示Eden)使用了45.10%的空间,两个Survivor区(S0,S1, 表示Survivor0,Survivor1)里面都是空的,老年代(O, 表示old)使用了62.75%,程序运行以来共发生Minor GC (YGC, young GC)436次,总耗时2.577秒,
发生Full GC(FGC, 表示Full Gc)0次,Full GC总耗时(FGCT, 表示Full GC Time)0秒, 所有GC总耗时(GCT, 表示GC Time)2.577秒
3: jstat -gccause pid
与 -gcutil 类似,额外输出上一次 GC 原因
jinfo Java配置信息工具
jmap 内存映像工具
使用方式
jmap -heap pid
显示 Java 堆详细信息
jstack java堆栈跟踪工具
使用方式
jstack pid