JVM技术专题精心准备了一套JVM分析工具的锦囊「JConsole补充篇」

Posted 浩宇の天尚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM技术专题精心准备了一套JVM分析工具的锦囊「JConsole补充篇」相关的知识,希望对你有一定的参考价值。

前提概要

本篇文章主要针对于之前本系列文章的补充版,之前落下了Jconsole分析工具,所以为了了却这个遗憾,所以小编又开了这篇文章,主要针对于Jconsole工具进行相关的应用性能分析。

初识JConsole

  • 【Jconsole(Java Monitoring and Management Console),内存监控管理控制台】

    • Jconsole是JDK自带的内置应用监控和性能分析工具,在%JAVA_HOME%/bin目录下可以找到jconsole的可执行文件。

    • Jconsole可以实现连接远程应用程序和本地程序应用,也可以同时监控几个jvm

    • Jconsole可以运行在java应用程序的资源消耗和性能进行监控,并统计计算相关图形报表,提供强大的可视化界面

    • Jconsole本身占用的服务器内存很小,甚至可以说几乎不消耗

    • 它用于对JVM中内存,线程和类等的监控。可使用JTop插件。

    • 而且结合Jstat,可以有效监控到java内存的变动情况,以及引起变动的原因。在项目追踪内存泄露问题时,很实用。

JConsole进行工作

分析器有自己的开销,因此最好的办法就是花点时间来弄清是什么开销。发现JConsole开销最简单的办法是,首先独自运行一个应用程序,然后在分析器下运行,并测量差异

  • 使用 -verbose:gc 尝试运行SwingSet2来查看垃圾收集清理,然后运行同一个应用程序并将JConsole分析器连接到它。

  • 当JConsole连接好了之后,一个稳定的 GC 清理流出现,否则不会出现。这就是分析器的性能开销。

Jconsole本地监控

  • 点击可执行文件(windows)

  • 启动命令服务
jconsole [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]

  -interval   将更新间隔设置为 n 秒 (默认值为 4 秒)
  -notile     初始不平铺窗口 (对于两个或多个连接)
  -pluginpath 指定 jconsole 用于查找插件的路径
  -version    输出程序版本

  connection = pid || host:port || JMX URL (service:jmx:<协议>://...)
  pid         目标进程的进程 ID
  host        远程主机名或 IP 地址
  port        远程连接的端口号

  -J          指定运行 jconsole 的 Java 虚拟机
              的输入参数
  • 访问页面

JConsole查看当前程序/进程的全局情况

JConsole 基本包括以下基本功能:概述、内存、线程、类、VM概要、MBean

单独查看内存使用情况和GC回收情况

内存页签相对于可视化的jstat 命令,用于监视受收集器管理的虚拟机内存。

“内存”选项卡具有“执行GC”按钮,可以随时单击该按钮以执行垃圾回收。

该图表显示了Java VM随时间的内存使用情况,堆和非堆内存以及特定内存池的内存使用情况。

Java VM管理两种内存:堆内存和非堆内存,这两种内存都是在Java VM启动时创建的。

(1)堆内存是运行时数据区,Java VM从中为所有类实例和数组分配内存。堆可以是固定的或可变的大小。垃圾收集器是一个自动内存管理系统,可回收对象的堆内存。

Eden Space:

伊甸区,对象被创建的时候首先放到Eden Space,进行垃圾回收后,不能被回收的对象被放入到空的Survivor区域

Survivor Space:

幸存者区,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象

Survivor Space分为两个空间大小一样的区域,分别是To Survivor和From Survivor,并且始终保持一个Survivor是空的

Eden Space和Survivor Space都属于新生代

对新生代 进行垃圾回收被称为Minor GC(或Young GC),每一次Minor GC后留下来的对象age(就是用来判断对象是否进入老年的标志)加1

Old Gen:

老年代,用于存放新生代中经过多次垃圾回收仍然存活的对象,也有可能是新生代分配不了内存的大对象会直接进入老年代。

经过多次垃圾回收都没有被回收的对象,这些对象的age已经足够old了,就会放入到老年代。

当老年代被放满之后,虚拟机会进行垃圾回收,称之为Major GC。由于Major GC除并发GC外均需对整个堆进行扫描和回收,因此又称为Full GC

默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。

查看程序中线程的情况

如果上面的“内存”页签相当于可视化的jstat命令的话,“线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、设备资
源等)、死循环、锁等待(活锁和死锁)

单独查看程序中类的加载和卸载情况

查看VM的概要情况以及相关运行参数

显示了所有在platform. MBeanserver上注册的MBeans的信息

Jconsole远程监控

Web应用程序分析工具假设通过一个套接字进行连通性分析,只需要进行少许配置来设置 JConsole(或者是基于 JVMTI 的分析器,就这点而言),监控/分析远程运行的应用程序。

JVM增加如下启动参数

-Djava.rmi.server.hostname=外网ip地址
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false

配置权限文件

如果连接需要帐号和密码的话,加上这一步配置。

[root@localhost management]# pwd
/usr/local/src/jdk1.8.0_131/jre/lib/management
[root@localhost management]# ls
jmxremote.access  jmxremote.password  jmxremote.password.template  management.properties  snmp.acl.template
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password

对于jmxremote.password,将其中的:

#monitorRole  QED
#controlRole   R&D

井号注释取消掉。其中monitorRole为只拥有只读权限的角色,controlRole有更高权限:读写等等。当然,也可以设置自己个性化的帐号密码。

然后配置权限文件为600

[root@localhost management]# chmod 600 jmxremote.password jmxremote.access

3)加入参数

-D com.sun.management.jmxremote.pwd.file=/usr/local/src/jdk1.8.0_131/jre/lib/management/jmxremote.password"

并修改下面的配置为true

-Dcom.sun.management.jmxremote.authenticate=true

连接失败的问题

  • 1)关闭防火墙
  • 2)hostname的问题:请将127.0.0.1修改为本地真实的IP(这个问题我没有遇到)
[root@localhost management]# vim /etc/hosts

192.168.1.12 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

以上是关于JVM技术专题精心准备了一套JVM分析工具的锦囊「JConsole补充篇」的主要内容,如果未能解决你的问题,请参考以下文章

JVM技术专题精心准备了一套JVM分析工具的锦囊「下篇」

JVM技术专题精心准备了一套JVM分析工具的锦囊「JConsole补充篇」

JVM调优工具锦囊:JDK自带工具与Arthas线上分析工具对比

UAVStack JVM监控分析工具:图形化展示采集及分析监控数据

JVM技术专题网络问题分析和故障排查规划指南「实战篇」

JVM技术专题JVM分析与调优技巧分析「原理篇」