JVM常用分析工具

JVM常用分析工具

一、Java Virtual Machine (JVM)
Compile once, run everywhere.
JVM常用分析工具_第1张图片

JVM常用分析工具_第2张图片

二、垃圾收集器与内存回收分配策略
Serial -> 单线程、“Stop the world”、简单 高效{粗暴}、client模式 默认 新生代.
ParNew -> 并行 多线程版、CMS 唯一搭档(除了Serial)(server首选).
Parallel Scavenge -> 并行 多线程、吞吐量优先、自适应调节、新生代
Serial Old -> 单线程、s的老年代版本
Parallel Old ->并行 多线程、吞吐量优先、ps的老年代版本、
CMS(Concurrent Mark Sweep) -> 并发(标记 清除)、低停顿
G1(Garbage-First) -> 科技前沿成果@_@!!!、并行并发、分代收集、空间整合、可预测停顿

三、Java Development Kit (JDK) 命令行 工具
监视JVM
jps
jstat
jstatd
Jmc

故障排除
jcmd
jinfo
jhat
jmap
jsadebugd
jstack

·官网:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/

jps (JavaVirtual Machine Process Status Tool): 虚拟机进程状况工具
命令格式:jps [options] [hostid]
-q : 抑制类名的输出,JAR文件名和传递给main方法的参数,仅生成本地JVM标识符列表。
-m: 显示传递给该main方法的参数。输出可能是null嵌入式JVM。
-l : 显示应用程序main类的完整包名或应用程序的JAR文件的完整路径名。
-v : 显示传递给JVM的参数。
-V : 抑制类名的输出,JAR文件名和传递给main方法的参数,仅生成本地JVM标识符的列表。
-Joption : 传递option给JVM,其中的选项是optionsJava应用程序启动器的参考页面中描述的选项之一。例如,-J-Xms48m将启动内存设置为48 MB。
样例:

jstat(Java Virtual Machine (JVM) statistics):监视Java虚拟机(JVM)统计信息。
命令格式:jstat [ option vmid [interval[s|ms] [count] ]
Interval:间隔时间 count:次数
class:显示类加载器行为的统计信息。
compiler:显示有关Java HotSpot VM即时编译器行为的统计信息。
gc:显示垃圾回收堆行为的统计信息。
gccapacity:显示有关世代及其对应空间容量的统计数据。
gccause:显示有关垃圾回收统计信息(相同-gcutil)的摘要,其中包含最后和当前(适用时)垃圾收集事件的原因。
gcnew:显示新一代行为的统计信息。
gcnewcapacity:显示有关新一代及其相应空间大小的统计信息。
gcold:显示旧版本和Metaspace统计信息的统计信息。
gcoldcapacity:显示有关旧一代大小的统计信息。
gcmetacapacity:显示有关元空间大小的统计信息。
gcutil:显示有关垃圾收集统计信息的摘要。
printcompilation:显示Java HotSpot VM编译方法统计信息。

jinfo(Configuration Info for Java):生成配置信息。
命令格式:jinfo [ option ] pid
-flag 名称 : 打印指定命令行标志的名称和值。
-flag [+ | - ]名称 : 启用或禁用指定的布尔命令行标志。
-flag name = value : 将指定的命令行标志设置为指定的值。
-flags : 打印传递给JVM的命令行标志。
-sysprops : 将Java系统属性打印为名。

jmap(Memory Map for Java):内存映射工具[生成堆转储快照]
命令格式:jinfo [ option ] vmid
-dump:[live,] format = b,file = filename : 以hprof二进制格式转储Java堆filename。live子选项说明是否之dump出存活的对象。
-finalizerinfo : 打印有关正在等待最终确定的对象的信息(linux)。
-heap :显示java堆详细信息,如使用哪种回收器、参数配置、分代状况等(linux)。
-histo [:live] : 显示堆中对象统计信息,包括类、实例数量、合计容量。
-clstats : 打印Java堆的类加载器智能统计。对于每个类加载器,它的名称,它的活动程度,地址,父类加载器以及它加载的类的数量和大小。
-F : -dump或 -histo选项不响应时,该选项强制生成dump快照(不支持live)。

jhat(JVM Heap Analysis Tool):虚拟机堆转储快照分析工具
命令格式:jhat [ options ] 堆转储文件

jstack(Stack Trace for Java):Java堆栈跟踪工具
命令格式:jstack [ options ] pid
-F : jstack[ -l] pid不响应时强制堆栈转储。
-l : 打印有关锁的其他信息,例如所java.util.concurrent拥有的同步器列表。
-m : 打印混合模式堆栈跟踪,其中包含Java和本机C / C ++框架。

四、JDK可视化工具
1、Jconsole
2、Eclipse Memory Analyzer
3、VisualVM

VisualVM(All-in-One Java Troubleshooting Tool)
多合一故障处理工具
独立软件:https://visualvm.github.io/download.html
插件:http://java.net/projects/visualvm/downloads/download/release133/visualvm_launcher_u1_eclipse_36.zip

eclipse:
Help -> Install New Solfware…
JVM常用分析工具_第3张图片

JVM常用分析工具_第4张图片

JVM常用分析工具_第5张图片

远程方法调用RMI(Remote Method Invoke)
服务器端创建Jstatd RMI

$ cat jstatd.all.policy 
grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;  
};

启动:

nohup jstatd -J-Djava.security.policy=jstatd.all.policy &
$ jps -lm
85907 sun.tools.jstatd.Jstatd

参考: 《深入理解 java虚拟机》 周志明
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/
https://visualvm.github.io/download.html
http://java.net/projects/visualvm/downloads/download/release133/visualvm_launcher_u1_eclipse_36.zip

你可能感兴趣的:(java)