程序员

深入理解java虚拟机学习笔记(三) 虚拟机性能监控与故障处理工

2017-07-30  本文已影响0人  冬天里的懒喵

1.JDK的命令行工具

jdk自带监控和故障处理工具

名称 主要作用
jps JVM Process Status Tool,显示指定系统内所有HotSpot虚拟机进程
jstat JVM Statistics Monitoring Tool,用于收集HostSport虚拟机各方面的运行数据
jinfo Configuation Info for Java,显示虚拟机的配置信息
jmap Mammory Map for java,生成虚拟机的存储快照(heapdump文件)
jhat JVM Heap Dump Browser,用于分析heapdump文件,会建立一个http/HTML的服务器,让用户通过浏览器查看分析结果
jstack Stack Trace for Java,显示虚拟机的线程快照

1.1 jps

jsp运行示例:

jps -mlv
jps执行效果
选项 作用
-q 只输出LVMID,省略主类名称
-m 输出虚拟机启动时传递给main函数的参数
-l 输出主类的名称,如果执行进程是jar包,则输出jar包路径
-v 输出虚拟机进程启动时的jvm参数

1.2 jstat

jstat 虚拟机统计信息监控工具

jstat命令格式:
jstat  [option vmid [interval [s|ms] [count] ] ]
表示 选项  进程ID  间隔时间[s|ms]  查询次数
如果运行的是远程主机,则vmid格式如下:
[protocol:][//]lvmid[@hostname[:port]/servername]

jstat运行示例

jstat -gc port
选项 作用
-q 只输出LVMID,省略主类名称
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 监视java堆状况,包括eden区,两个survivor区,老年代,永久代等的容量、已用空间、GC时间等统计信息
-gccapacity 监视与-gc基本相同,但是输出关注java堆的各个区域的最大、最小空间
-gcutil 监视内容与-gc基本相同,但输出的主要关注已使用空间占总空间的百分比
-gccause 与-gcutil基本相同,但会输出上一次GC产生的原因
-gcnew 监视新生代的GC状况
-gcnewcapacity 监视与-gcnew基本相同,但是输出关注java堆的各个区域的最大、最小空间
-gcold 监视老年代的GC状况
-gcnewcapacity 监视与-gcold基本相同,但是输出关注java堆的各个区域的最大、最小空间
-gcpermcapcacity 输出永久代的最大、最小空间
-compiler 输出JIT编译器编译过的方法,耗时等信息
-printcompilation 输出已经被JIT编译的方法
compiler 示例

1.3 jinfo

jinfo java配置信息工具,其作用是实时查看和调整虚拟机各项参数。

jinfo [option] pid
jinfo flags 示例
选项 作用
-flag <name> 打印指定name参数的值
-flag [+|-]<name> 让指定的name参数可用或者不可用
-flag <name>=<value> 设置一个新参数,name=value
-flags 打印全部JVM参数
-sysprops 打印JAVA系统参数
打印jvm和系统参数

1.4 jmap

jmap 用于生成堆转储快照 heapdump文件.

命令格式
jmap [option] vmid

选项说明:

选项 作用
-dump 生成java转储的堆快照,格式为 -dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行的finalize方法的对象,只在Linux/Solairs平台下有效
-heap 显示java堆的详细信息,使用那种回收器、参数配置、分代状况等,只在Linux/Solairs平台下有效
-permstat 以classLoader为统计口径显示永久代内存状态。只在Linux/Solairs平台下有效
-F 当虚拟机对-dump选项没有响应时,可以使用这个参数强制生成dump快照,只在Linux/Solairs平台下有效

1.4 jhat

该命令主要与jmap搭配使用,用来分析jmap转储的转储快照。其中构建了一个微型的http/html服务器。生成dump文件的分析结果后可以通过浏览器进行查看。
通常情况下不采用jhat进行分析,一方面,分析工作需要耗费额外的资源和时间,既然都要在其他机器进行,则不需要限定于上述工具。另外一方面,jhat界面比较简陋,可以用visualVM,eclipse的Memory Analizer 等更加专业的分析工具进行替换。

1.5 jstack

jstack java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照threaddump文件。

命令格式:
jstack [ option ] |vmid

选项说明:

选项 作用
-F 当正常的输出不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法,则显示C/C++的堆栈
jstack运行示例

2.JDK的可视化工具

主要包括:jConsole、jVisualVM

2.1 jConsole

jConsole 连接 概要信息

2.2 jVisualVM

运行示例

插件更新:

https://visualvm.github.io/pluginscenters.html 
上述页面选择适合的JDK版本
如 
JDK 8 Update 131 
https://visualvm.github.io/uc/8u131/updates.xml.gz
JDK 8 Update 40 - 121 
JDK 7 Update 79 - 80 
https://visualvm.github.io/archive/uc/8u40/updates.xml.gz

jdk版本

jdk版本信息
选择
https://visualvm.github.io/archive/uc/8u40/updates.xml.gz
打开 jvisualVM -> 设置 设置 编辑

保存即可。
之后更新插件, 安装visualGC

更新插件

重启,重新进入即可

运行效果图
上一篇 下一篇

猜你喜欢

热点阅读