虚拟机性能监控与故障处理工具


前言

这个章节相当关键,因为前面4篇文章主要介绍了关于虚拟机内存分配和回收技术各方面的内容


工具是运用知识处理数据的手段

JDK的命令行工具

对于一般的程序员来说,其实我们知道的有两个命令工具java.exe 和javac.exe,但是其他的bing目录下面的命令行程序却未必知道。这里我说下其中用于监视虚拟机和故障处理工具。这些虽然sun公司是免费送给我们的,没有提供技术支持,但是也是非常的强大

名称 全称 主要作用
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 用于分析heapmap文件,它会建立一个http/html服务器让用户可以在浏览器上查看分析结果
jstack stack trace for java 显示虚拟机的线程快照

1、jps (JVM process status 虚拟机进程状态)

1.1、jps -l :输出主类或者jar的完全路径名

1、下面这两个是我运行的springBoot主类,里面有main函数(也就是说main函数还没有停止运行)

WX20180410-155344@2x

2、随便启动一个普通的main函数,然后debug打上断点不让结束运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.hlj.jvm.JvmBin;

/**
* @Description
* @Author HealerJean
* @Date 2018/4/10 下午3:55.
*/
public class JpsMain {

public static void main(String[] args) {
System.out.println("debug模式启动main函数 : jps -l");
}
}


WX20180410-155807@2x

1.2、jps –v :输出jvm参数(查看已经运行的main的JVM参数)

1、配置上面的main的jvm参数为

1
-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 

2、jps -v
WX20180410-161106@2x

1.3、jps -q 显示java进程号

其实也可以通过 jps -l 查看进程号,进而可以直接关掉相关的main(之前端口冲突了,还需要通过lsof -i tcp:端口 查找,现在直接可以使用它岂不是更加方便呢)

WX20180410-161227@2x

1.4、如果需要查看其他机器上的jvm进程,需要在待查看机器上启动jstatd。

2、jstat (JVM Statistics Monitoring Tool虚拟机统计信息监控工具)

用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者是远程虚拟机进程中的类加载,内存,垃圾收集,在没有GUI图形页面,踏实运行期定位虚拟机性能的首选工具

1
2
3
4
5
6
7
8
9
10
11
12
13
class (类加载器) 
compiler (JIT) 
gc (GC堆状态) 
gccapacity (各区大小) 
gccause (最近一次GC统计和原因) 
gcnew (新区统计)
gcnewcapacity (新区大小)
gcold (老区统计)
gcoldcapacity (老区大小)
gcpermcapacity (永久区大小)
gcutil (GC统计汇总)
printcompilation (HotSpot编译统计)

举例 命令格式是

1
2
3
4
5
6
7
8
9
10
11
每250毫秒收集一次进程为2764 的垃圾收集状况,一共查询20次
jstat -gc 2764 250 20

S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGCT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时<br><br>

WX20180410-164142@2x

监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比

1
2
3
4
5
6
7
8
S0 S1 (Survivor0 Survivor1)
E Eden 所占百分比
O 老年代 所占百分比
M 永久代 所占百分比
YGG 年轻代GC次数 YGCT 年轻代GC时间
FGC 老年代GC次数 FGCT 老年代GC时间
GCT 总耗时
stat -gcutil 4838

WX20180410-165610@2x

3、


Author: jony
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source jony !
 Previous
虚拟机性能监控可视化工具 虚拟机性能监控可视化工具
前言JDK除了提供大量的命令行之外,还提供两个强大的可视化工具Jconsole(JDK1.5提出来的)和VisualVM(JDK1.6提出来的,并且已经从JDK分离出来成为可以独立发展的开源项目) 1、jconsole1、启动jcons
2018-04-10
Next 
内存分配和回收策略以及虚拟机参数配置 内存分配和回收策略以及虚拟机参数配置
前言1、对象优先在Eden分配(如果小于Survivor,先进入Survivor)复制算法还记得吧,就是说的商业虚拟机关于新生代的垃圾收集就是采用的复制算法 将内存分为3分分别为8:1;1 那么Eden 就代表着8份 123456789
2018-04-09
  TOC