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

1.jps

JVM Process Status Tool:可显示出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier,LVMID),对于本地虚拟机进程来说,LVMID 与操作系统的进程 ID(Process Identifier ,PID 是一致的),如果启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依赖 jps 显示主类的功能才能区分

2.jstat 虚拟机统计信息监视工具

JVM Statistics Monitoring Tool 用于监视虚拟机各种运行状态信息,能显示本地或者远程虚拟机进程中的类加载,内存,垃圾手机,JIT 编译的运行数据

例子:

jstat -gc 进程 pid 毫秒数 查询次数

jstat -gc 2764 250 20

检查进程 2764 的垃圾回收情况 每 250 秒检查一次 一共检查 20 次

image.png

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT

1. 在这里 Survivor 应该是有四个区(S0C S1C S0U S1U)

2.Eden 这里有两个区 EC,EU。

3. 老年代 O 也是两个区 OC,OU

4. 永久两个区 PC,PU

5.YGC:表示 Young GC(Minor GC)年轻代回收

6.YGCT:Young GC Time 年轻代回收时间

7.FGC:FULL GC

8.FGCT:FULL GC TIME

9.GCT:所有 GC 总耗时

3.jinfo

Configuration Info For Java 实时查看和调整虚拟机各项参数

-v 可以查看虚拟机启动时显式指定的参数列表

java_vm_config.txt

对于 windows 平台限制较多 只提供最基本的 flag 功能,但在 Linux 下甚至能在运行时修改参数

4.jmap

Memory Map For Java 生成转储快照 一般称为 heapdump 或者 dump 文件

还可以查询 finalize 执行队列,java 对和永久代的信息,如空间使用率,当前用的是哪一个收集器等

windows 下只能使用 -dump 和 -histo

java_jmap_demo.txt

5.jhat

JVM Heap Analysis Tool 通常与 jmap 搭配使用,在实际工作中一般不会使用此工具,在后面的 VisualVM 更加直观

6.jstack

Stack Track For Java 用于生成此时此刻的线程快照

常用参数 -F 强制输出堆栈 -l 除了堆栈外,显示关于锁的附加信息

ps: 从 1.5 开始 javaThread 类就新增了 getAllStackTraces() 方法用于获取虚拟机线程中所有线程的 StackTraceElement 对象

ThreadTest.java

7. 可视化工具

JConsole(Java Monitoring and Manageme Console)

在 JDK/bin 目录下用 jconsole.exe 启动
image.png

此段代码运行之后 曲线如下

image.png

虚拟机参数如下

-Xms100m -Xmx100m -XX:+UseSerialGC
image.png

由于没有设置 -XX:SurvivorRadio 参数 Eden 与 Survi 空间默认比例 8:1,整个新声代大约 27 328KB*125%=34160K

特别注意:JConsole 的线程下可以直接检测死锁,并直接显示堆栈信息
image.png

8. 多合一故障处理工具

All-in-One java TroubleShooting Tool 他是是目前位置最强大的运行监视和故障处理程序,此工具可以直接在生产工具中使用,对实际应用的性能影响比较小

注:此工具提供了程序运行期间方法级别的 CPU 执行时间分析以及内存分析,此分析堆内存有较大影响

此工具由于原更新仓库已经 down 掉所以要手动设置新仓库,需要注意的是地址貌似只支持 http 不支持 https 所有 连接需要注意 jdk 版本及对应的地址在网站http://visualvm.github.io/pluginscenters.html里面,比如 jdk1.7.0_40 对应的就是http://visualvm.github.io/archive/uc/7u14/updates.xml.gz

Btrace.rar

但是我发现即使地址填了实际安装时还是有问题应该还是因为 https 的问题,但是报错的内容有连接,所以我手动下载 包在上面,直接安装即可

Btrace 可实现 在实际应用中调用代码时,实时打印参数,运行结果,堆栈等信息,此工具有很多高级的用法,另外这个脚本编译功能没有提示很蛋疼