JVM-性能监控分析工具

来源:4大JVM性能分析工具详解,及内存泄漏分析方案

 

1.VisualVM

VisualVM 是javajdk自带的牛逼的调优工具,也是平时使用最多调优工具,几乎涉及了jvm调优的方方面面。启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数。

这个工具放在JDK安装目录的bin目录下(例:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin), ./jvisualvm 即可使用; 如下图所示:

监视页面主要展示 系统资源占用情况:

 

  • CPU :展示java程序运行的时候占用的cpu资源

  •  :这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由”伊甸园”和”两个幸存区组成”三部分组成,堆视图看到的资源占用实际是”老年代”、”伊甸园(Eden)”、”两个幸存者(Survivor )”的一个综合情况。

  • PermGen :Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区)

  • Metaspace(元空间):JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

  •  :此视图 主要展示 当前程序加载了多少个类

  • 线程: 当前程序的线程启动情况

  • 堆Dump : 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。

     

线程页面(主要展示程序中所有的线程运行状态):

 

  • 线程dump : 所有线程的快照(对分析线程死锁,比较有帮助

  • 时间线 : 展示每个线程的实时运行状态(不同颜色代表不同的状态)

 

实战:性能测试之jvisualvm监控分析

 

2.Jconsole

JConsole是一个JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监控主要体现在:堆栈内存、线程、CPU、类、VM信息这几个方面,而管理主要是对JMX MBean(managed
beans,被管理的beans,是一系列资源,包含对象、接口、设备等)的管理,不仅能查看bean的属性和方法信息,还能够在运行时修改属性或调用方法。

直接在jdk/bin目录下./jconsole即可启动,界面如下:

 

1、内存

在内存页我们可以看到程序运行期间JVM各个部分的内存状况,右下角是对应各个分区的内存使用柱状图,点击对应柱可查看详情

 

2、线程

该页面可以查看当前JVM进程启动了多少个线程,并能查看每个线程的状态及堆栈信息,此外还有一个功能就是能够自动检测死锁

 

3、类

该页面其实和线程页有些相似,不过显示的是JVM加载类的信息

 

4、VM概述

这个其实没必要细说,看图就明白,显示了当前JVM的各方面信息

 

5、MBean管理

 

分析步骤:

1. 用工具生成java应用程序的heap dump(如jmap)

2. 使用Java heap分析工具(如MAT),找出内存占用超出预期的嫌疑对象

3. 根据情况,分析嫌疑对象和其他对象的引用关系。

4. 分析程序的源代码,找出嫌疑对象数量过多的原因。

 

jps

查看所有的jvm进程,包括进程ID,进程启动的路径等等。

我自己也用PS,即:ps -ef | grep java

jstack

观察jvm中当前所有线程的运行情况和线程当前状态。

系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。

系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

jstat

jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;

特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

jmap

监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;

系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等

jinfo

观察进程运行环境参数,包括Java System属性和JVM命令行参数

系统崩溃了?jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值