虚拟机性能监控与故障处理工具
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 次
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 可以查看虚拟机启动时显式指定的参数列表
对于 windows 平台限制较多 只提供最基本的 flag 功能,但在 Linux 下甚至能在运行时修改参数
4.jmap
Memory Map For Java 生成转储快照 一般称为 heapdump 或者 dump 文件
还可以查询 finalize 执行队列,java 对和永久代的信息,如空间使用率,当前用的是哪一个收集器等
windows 下只能使用 -dump 和 -histo
5.jhat
JVM Heap Analysis Tool 通常与 jmap 搭配使用,在实际工作中一般不会使用此工具,在后面的 VisualVM 更加直观
6.jstack
Stack Track For Java 用于生成此时此刻的线程快照
常用参数 -F 强制输出堆栈 -l 除了堆栈外,显示关于锁的附加信息
ps: 从 1.5 开始 javaThread 类就新增了 getAllStackTraces() 方法用于获取虚拟机线程中所有线程的 StackTraceElement 对象
7. 可视化工具
JConsole(Java Monitoring and Manageme Console)
在 JDK/bin 目录下用 jconsole.exe 启动
此段代码运行之后 曲线如下
虚拟机参数如下
-Xms100m -Xmx100m -XX:+UseSerialGC
由于没有设置 -XX:SurvivorRadio 参数 Eden 与 Survi 空间默认比例 8:1,整个新声代大约 27 328KB*125%=34160K
特别注意:JConsole 的线程下可以直接检测死锁,并直接显示堆栈信息
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
但是我发现即使地址填了实际安装时还是有问题应该还是因为 https 的问题,但是报错的内容有连接,所以我手动下载 包在上面,直接安装即可
Btrace 可实现 在实际应用中调用代码时,实时打印参数,运行结果,堆栈等信息,此工具有很多高级的用法,另外这个脚本编译功能没有提示很蛋疼