JVM读书日记3(虚拟机性能监控、故障处理工具)

基础故障处理工具

  1. 商业授权工具:主要是JMC(java mission control) 及它要使用到的JFR(Java Flight Recorder),JMC这个原本来自于JRockit的运维监控套件,11之前都无需独立下载,但是商业环境中使用它是需要付费的。
  2. 正式支持工具:者一类工具属于被长期支持的工具,不同平台、不同版本的JDK之间,这类工具可能会略有差异,但是不会出现某一个工具突然消失的情况。
  3. 是线性工具:这一类工具在他们的使用说明中被声明为没有技术支持,并且是实验性质的产品。

JPS虚拟机进行状况工具

jps可以列出正在运行的虚拟机进程,并现实虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。

jps命令格式 jps [options] [hostid]
jps 执行演示

jps -l
17544 sun.tools.jps.Jps

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

jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具

用于监视虚拟机各种运行状态信息的命令工具,它可以现实本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI图形界面、只提供了纯文本控制台环境的服务器上,它僵尸运行期定位虚拟机性能问题的常用工具。

jstat命令格式

jstat [ option vmid [ interval [ s | ms ] [ count ]] ]
在这里插入图片描述

jinfo(Configuration Info For Java):Java配置信息工具

实时查看和调整虚拟机各项参数。

命令格式

jinfo [ option ] pid

执行样例

jinfo -flag CMSInitiationOccupancyFraction 1444
-XX:CMSInitiationOccupancyFraction=85

jamp(Memory Map for Java):Java内存映像工具

用于生成堆转储快照。

jmap 命令格式

jmap [ option ] vmid

选项作用
-dump生成Java堆转储快照。格式为 -dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象。
-finalizerinfo现实在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台有效
-heap现实Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台有效
-histo现实堆中对象统计信息、包括类、实例数量、合计容量
-permstat以ClassLoader为统计口径现实永久代内存状况,
-F当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照。

jhat(JVM Heap Analysis Toll):虚拟机堆转储快照分析工具

JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。 jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看。不过 实事求是地说,在实际工作中,除非手上真的没有别的工具可用,否则多数人是不会直接使用jhat命令 来分析堆转储快照文件的,主要原因有两个方面。一是一般不会在部署应用程序的服务器上直接分析 堆转储快照,即使可以这样做,也会尽量将堆转储快照文件复制到其他机器[1]上进行分析,因为分析 工作是一个耗时而且极为耗费硬件资源的过程,既然都要在其他机器上进行,就没有必要再受命令行 工具的限制了。另外一个原因是jhat的分析功能相对来说比较简陋,后文将会介绍到的VisualVM,以 及专业用于分析堆转储快照文件的Eclipse Memory Analyzer、IBM HeapAnalyzer[2]等工具,都能实现 比jhat更强大专业的分析功能。代码清单4-3演示了使用jhat分析上一节采用jmap生成的Eclipse IDE的内 存快照文件。

jstack(Stack Trace for Java):Java堆栈跟踪工具

生成虚拟机当前时刻的县城快照。

jstack命令格式

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者 javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的 目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂 起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过jstack来查看各个线程的调用堆栈, 就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
jstack [option ] vmid

选项作用
-F强制输出
-l出堆栈外,显示关于锁的附加信息
-m如果调用到本地方法的话,可以先式C/C++的堆栈

可视化故障处理工具

JHSDB

DK中提供了JCMD和JHSDB两个集成式的多功能工具箱,它们不仅整合了上面介绍到的所有 基础工具所能提供的专项功能,而且由于有着“后发优势”,能够做得往往比之前的老工具们更好、更强大。
在这里插入图片描述
JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。服务性代理是 HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言(含少量JNI代码)实现的 API集合。服务性代理以HotSpot内部的数据结构为参照物进行设计,把这些C++的数据抽象出Java模 型对象,相当于HotSpot的C++代码的一个镜像。通过服务性代理的API,可以在一个独立的Java虚拟 机的进程里分析其他HotSpot虚拟机的内部数据,或者从HotSpot虚拟机进程内存中dump出来的转储快 照里还原出它的运行状态细节。服务性代理的工作原理跟Linux上的GDB或者Windows上的Windbg是相 似的。

JConsole:Java监视与管理控制台

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean(Managed Bean)对系统进 行信息收集和参数动态调整。JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以 运行于虚拟机之上的软件中,典型的如中间件大多也基于JMX来实现管理与监控。虚拟机对JMX MBean的访问也是完全开放的,可以使用代码调用API、支持JMX协议的管理控制台,或者其他符合 JMX规范的软件进行访问。

启动JConsole 通过JDK/bin目录下的jconsole.exe启动JCon-sole后,会自动搜索出本机运行的所有虚拟机进程,而不需要用户自己使用jps来查询。

在这里插入图片描述
在这里插入图片描述

  1. “概述”页签里显示的是整个虚拟机主要运行数据的概览信息,包括“堆内存使用情况”“线 程”“类”“CPU使用情况”四项信息的曲线图,这些曲线图是后面“内存”“线程”“类”页签的信息汇总。
  2. “内存”页签的作用相当于可视化的jstat命令,用于监视被收集器管理的虚拟机内存的变化趋势。
    在这里插入图片描述
  3. “线程”页签的功能就相当于可视化 的jstack命令了,遇到线程停顿的时候可以使用这个页签的功能进行分析。前面讲解jstack命令时提到 线程长时间停顿的主要原因有等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等 待等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值