jvm全新框架个人学习

JVM——jmc使用说明

2021-06-20  本文已影响0人  小波同学

jmc:Java Mission Control

使用 JMC可以监视和管理 Java 应用程序,不会导致相关工具类的大幅度性能开销,它使用为 Java 虚拟机 (JVM) 的普通自适应动态优化收集的数据。

主要部分

Java Mission Control 插件使用 Java Management Extensions (JMX) 代理连接到 JVM

启动JMC后,连接某个本地应用后,出现如下界面:


远程连接JVM(通过JMX连接如果想要用jmc监控远程的JVM进程,配置方式和jvisualvm方式一一样即可)
本地连接比较简单这里就不在赘述,远程连接JVM,这里利用VMWare工具进行模拟,过程中遇到一些问题,值得注意的。

首先,远程机器被监控的程序需要开启调试端口,在执行java命令行中加入以下属性,属性没有以ssl安全认证方式连接的,案例中启动监听端口为7091

JMX配置(被监控的远程Tomcat)

进入tomcat安装目录安装找到catalina.sh文件,在CATALINA_OPTS中增加一下配置:

-Dcom.sun.management.jmxremote=true 
-Djava.rmi.server.hostname=115.29.206.6 
-Dcom.sun.management.jmxremote.port=6666 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.managementote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

配置成功之后我的CATALINA_OPTS为:

CATALINA_OPTS="-Xms1024m -Xmx6144m -XX:+HeapDumpOnOutOfMemoryError 
-XX:+PrintGCDetails -XX:+PrintGCDateStamps 
-Dspring.profiles.active=production 
-Xloggc:/data/logs/gc-`date +"%Y-%m-%d_%H%M%S"`.log 
-XX:MaxPermSize=1024M 
-Dcom.sun.management.jmxremote=true 
-Djava.rmi.server.hostname=115.29.206.6 
-Dcom.sun.management.jmxremote.port=6666 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.managementote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder"

主要配置项说明

创建完成后双击MBean或者右键–>打开JMX控制台,均能打开控制台

展示面板

概览

默认布局提供 CPU 和内存使用情况的概览。
概览:可以添加自定义图表,通过概览的加号”添加图表”实现;可以重置,通过”重置为默认控件”实现。
添加图表后,可以通过图表的加号添加相应的子项,并可以在图表上右键详细设置(如下图中的Test)


MBean浏览器

JMC使用托管Bean (MBean) 为监视和管理 Java 应用程序性能提供统一且一致的界面。MBean 是采用符合 JMX 规范的设计模式的托管对象。MBean 可以表示一个设备、一个应用程序或需要托管的任何资源。MBean 的管理界面由一组属性、操作和通知组成。
MBean 浏览器提供对所有已注册 MBean 的访问。MBean 在管理服务器中注册,后者可以通过与 Java Management Extensions (JMX) 兼容的客户机访问

要创建和注册新 MBean,请单击 MBean 面板加号图标。执行此操作会启动动态创建和注册新的 MBean 向导,提示为新 MBean 输入对象名和类名。若要继续,对象名必须有效,并且类名必须是有效的 Java 类名。请注意,该向导不会验证类是否对 MBean 服务器可用;将只进行语法检查。要注销特定 MBean,右键单击并从上下文菜单中选择注销。

MBean功能

触发器

使用触发器选项卡可以管理满足特定条件时触发事件的规则。这是一种无需持续地监视应用程序即可跟踪运行时问题的有用方法。以灰色显示的规则在监视的 JVM 中不可用。默认情况下,停用所有规则。要激活某个规则,请选中该规则旁边的复选框

规则详细信息

创建触发器


设置触发规则的条件:

在规则触发时发生的操作

系统

系统选项卡提供了运行 JVM 的系统的信息、JVM 的性能属性以及系统属性列表。


要向表中添加属性,请单击 JVM 统计信息面板右上角的添加属性按钮。要删除属性,请在表中右键单击该属性,然后选择删除。右键单击属性后,可以更改其更新间隔、单位,而对于一些属性,还可以设置值。

内存

使用内存选项卡可以监视应用程序使用内存资源的效率。此选项卡主要提供以下方面的信息:堆使用量、垃圾收集和活动内存池。此选项卡上提供的信息可帮助确定是否已将 JVM 配置为提供最佳应用程序性能。

在内存选项卡中,可以使用该选项卡右上角的运行完全垃圾收集按钮手动启动完全垃圾收集。

右键单击属性后,可以更改其更新间隔、单位,而对于一些属性,还可以设置值。

线程

使用线程选项卡可以监视线程活动。此选项卡包含一个绘制应用程序随时间推移的活动线程使用情况的图形、一个由该应用程序使用的所有活动线程的表以及选定线程的堆栈跟踪。

实时监视最后三个值会消耗大量系统资源。这就是默认情况下禁用它们的原因。使用表上方相应的复选框,对这些值启用监视。

可以使用 Ctrl 键在活动线程表中选择多个线程来显示多个堆栈跟踪。

诊断命令

使用诊断命令可监视 Java 应用程序的效率和性能。JMC 使用大量不同的诊断工具,包括一组可以使用诊断命令选项卡针对应用程序运行的命令。

运行 JMX 控制台监视 JVM 的额外成本很小,几乎可以忽略不计。它提供低成本的应用程序监视和概要分析 JMX标准参考

JFR:Java Flight Recorder

JFR 是 JMC 中一个非常关键的功能。是一个用于收集有关正在运行的 Java 应用程序的诊断数据和概要分析数据的工具。它记录了 JVM 所有事件的历史数据,通过这些数据,程序性能分析人员可以结合以往的历史数据对 JVM 性能瓶颈进行分析诊断。它集成到 Java 虚拟机 (JVM) 中,几乎不会带来性能开销,因此甚至可以在高负载生产环境中使用。使用默认设置时,内部测试和客户反馈表明性能影响低于 1%。对于一些应用程序,这一数字会大幅降低。但是,对于短时间运行的应用程序 (不是在生产环境中运行的应用程序类型),相对的启动和预热时间可能会较长,这对性能的影响可能会超过 1%。JFR 收集有关 JVM 及其上运行的 Java 应用程序的数据。

JFR 的基本操作是开启一系列的事件。当某个事件发生时,这个事件的所有数据将会被保存至内存或者一个文件当中。数据流被保留在一个环形缓存中,所以只有最近发生的事件的数据才是可用的。JMC 可以从 JVM 或者文件中读取并展示这些事件数据,通过这些数据,可以进行性能分析。

启用 Java 飞行记录器

默认情况下,在 JVM 中禁用了 JFR。要启用 JFR,必须使用 -XX:+FlightRecorder 选项启动 Java 应用程序。由于 JFR 是一种商业功能,仅在基于 Java 平台标准版 (Oracle Java SE Advanced 和 Oracle Java SE Suite) 的商业包中提供,因此还需要使用 -XX:+UnlockCommercialFeatures 选项来启用商业功能。(可以参阅在准备阶段配置中的配置)

使用命令行选项可以

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ……

请注意,在 JVM 上运行依赖于 lambda 表单的其他语言时 (如 JavaScript 实施 Nashorn),堆栈跟踪的深度会非常深。要确保对大堆栈的堆栈跟踪正确采样,可能需要增加飞行记录器的堆栈深度。通常将此值设置为 1024 便已足够:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=stackdepth=1024 ……

JFR 具有以下优势

JFR 使用场景

JFR展示的项目

飞行记录器插件在一系列选项卡和子选项卡中显示记录文件的信息,并带有包含表和图形的面板。选项卡排列在选项卡组中,这些选项卡组可合并有关 JVM 和 Java 应用程序运行时的特定方面的数据。

JFR一般信息

一般信息选项卡组显示有关 JVM、系统和记录的一般信息。

JFR内存

内存选项卡组显示有关内存管理和垃圾收集的信息

TLAB中的内存分配和TLAB外的内存分配事件。新TLAB分配提供了三种以上专供于分析新TLAB分配事件的虚拟化类型:类级、线程级和分析级的分配。分析级分配是对这三种类型的一个简单的栈追踪集合。TLAB外分配的内存标签页和新TLAB标签页的工作原理相同,仅仅在这个时间点是一致的。

限制:因为新TLAB的内存分配事件仅仅只是总的线程本地内存分配的样本,仅仅只有一个事件是很难说明实际情况的。更多的事件才会有更精确的图片。此外,如果分配事件的行为在记录期间变化非常大,那么这样也很难建立一个十分有说服力本地内存分配视图。

JFR代码

代码分析是Java性能分析重点,通过代码分析,可以清楚的知道系统运行时,哪些类及方法被高频率的调用

代码选项卡组包含有关方法、异常错误、编译和类加载的信息。该选项卡组用于分析与代码执行相关的 Java 应用程序的各个方面。如果 JVM 未生成任何 CPU 负载,线程通常处于等待状态,因此将不会在此选项卡组中获取大量有意义的统计信息。

查看热点方法调用栈,可以了解到系统的主要计算资源消耗情况

以模块化的方式直观的看到系统运行状态,显示最常用的堆栈跟踪,这对于查找 Java 应用程序中的瓶颈非常有帮助;

JFR线程

线程选项卡组包含有关 Java 应用程序中的线程和锁的信息。可以得知CPU占用率的分布(系统占用率、应用程序+JVM占用率)和活动线程数,判断CPU占用率分布是否合理。

线程争用是解决应用性能比较关键的步骤,定位线程争用的情况,可发幅度提升性能有

JFR I/O

I/O 选项卡组包含有关文件以及套接字读取和写入的信息。此选项卡组可用于分析 Java 应用程序处理的数据量。

提供文件以及套接字读取和写入的高级视图


有关在记录期间进行的文件读取操作的信息


有关记录期间进行的文件写入操作的信息


JFR系统

系统选项卡组包含配置,列出正在运行的进程和正在运行 JVM 和 Java 应用程序的系统上的环境变量。

有关正在运行 Java 应用程序的硬件和软件的信息


含一个表,其中列出记录期间正在系统中运行的所有进程


含一个表,其中列出启动 JVM 时操作系统中设置的环境变量的键值对


JFR事件

事件选项卡组包含有关记录期间收集的事件的信息。JFR 记录每个事件及其发生时间和与该事件关联的数据。JMC5.5共支持80多种事件。默认情况下,并没有开启所有事件类型的记录,将对性能影响较大的 6 种类型事件关闭,以此达到将 JFR 对应用程的影响降到 1%以内,对性能影响的大小由开启记录的事件的类型和数量有关。

事件标签组中的Log标签是查看每个单独事件的绝佳地址

常用事件类型

事件类型 JFR或其他工具获取 只能JFR获取
Classloading 被加载的类的数量和未被加载的类的数量 加载类的类加载器(classloader),加载一个类需要的时间
Thread statistics 创建线程的数量、销毁线程的数量、线程快照(dump) 阻塞指定线程的锁以及被指定锁阻塞的线程
Throwables 应用程序实用的异常类 应用程序抛出的异常和错误的数量以及创建异常和错误的栈记录
TLAB allocation 内存堆中已分配的数量、TLAB(Thread-Local Allocation Buffers)的大小 在内存对中指定对象的内存分配以及为这些对象分配内存的栈记录
File and socket I/O 进行 I/O 消耗的时间 每一次读写调用的时间消耗,读写操作消耗时间过长的文件或套接字
Monitor blocked 等待监控器的线程 阻塞某个线程的监控器、线程被阻塞的时间
Code cache 代码缓存的大小以及内容 从代码缓存中移除的方法、代码缓存的配置
Code compilation 哪些方法被编译,OSR 编译,编译耗时 JFR 中没有额外的信息,但 JFR 总结了多个源文件的信息
Garbage collection GC 的次数,包括每一个阶段的次数、每个代的大小 JFR 中没有额外的信息,但 JFR 总结了来自多个工具的信息
Profiling 检测分析和采样分析 JFR 并不能获得分析器获得的丰富信息,但 JFR 提供了更高层次的概述

Java Mission Control 通信

HotSpot JVM 使用基于远程方法调用 (RMI) 连接器的Java Management Extensions (JMX)技术启用监视和管理功能。这也称为基于RMI的JMX或简称 JMXRMI。要配置连接,启动 JVM 时必须设置以下系统属性:

注意:禁用验证是不安全的。任何知道 (或猜中) JMX 端口号和主机名的远程用户都能够监视和控制 Java 应用程序和 VM。虽然开发时这是可接受的,但对于生产系统不建议这样设置。

jcmd 1152 VM.unlock_commercial_features
jcmd 41250 JFR.start delay=10s duration=1m filename=/Users/cc/Desktop/log.jfr

参考:
https://blog.csdn.net/u010397519/article/details/95635459

https://www.cnblogs.com/duanxz/p/8533174.html

上一篇 下一篇

猜你喜欢

热点阅读