Java的JMC和飞行记录器FlightRecord

您所在的位置:网站首页 会议自动记录器怎么用的 Java的JMC和飞行记录器FlightRecord

Java的JMC和飞行记录器FlightRecord

2024-06-06 03:05| 来源: 网络整理| 查看: 265

JRE版本:oracle jre8

Docker版本:docker-ce 19.03.08

CentOS版本:centos8

飞行记录器属于JMC,JMC的全称是Java Mission Control,在jdk的安装目录里面就可以找到这个工具。

从oracle的官网来看,JMC和飞行记录器是官方很重视的性能分析工具,它们实际使用起来也比MAT这种东西要方便实用得多,官方对于它的描述是:Advanced Java Diagnostics and Monitoring Without Performance Overhead。关于版本等更多的信息可以查看官网:https://docs.oracle.com/javacomponents/index.html。

这里需要注意的一点是,JMC可以用于java7以上的所有版本,而飞行记录器,只能用于oracle jre,且是java7及以上的版本,因为要使用飞行记录器,需要开启jvm的商业特性,也就是在启动的时候加上参数:"-XX:+UnlockCommercialFeatures","-XX:+FlightRecorder"。如果是open jdk,尝试加这两个参数的时候,会直接导致虚拟机终止,无法正常启动。所以,飞行记录器只能局限在oracle jdk里面使用。

下面演示如何开启飞行记录器,并远程监控服务器的jvm。这里我基于docker来做。

1.使用ide创建一个简单的demo项目,随便什么项目都可以,打成jar包,放到Linux服务器的home/java目录里面。

2.创建一个oracle jre8镜像,创建方式,可以参考我的另外一篇博客:https://blog.csdn.net/dap769815768/article/details/105414717

3.在home/java目录里面,新增一个Dockerfile文件,内容如下:

FROM jre8:1.0 ADD test-1.0.jar test-1.0.jar CMD ["java", //开启商业特性和飞行记录器 "-XX:+UnlockCommercialFeatures", "-XX:+FlightRecorder", //开启远程调试 "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", //开启JMC服务端口 "-Dcom.sun.management.jmxremote.rmi.port=1099", "-Dcom.sun.management.jmxremote=true", "-Dcom.sun.management.jmxremote.port=1099", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.local.only=false", //这个ip是你的服务器所在的ip,不是你的本地机器的ip "-Djava.rmi.server.hostname=192.168.231.200", "-jar", "test-1.0.jar"]

这里我为了展示方便,给参数部分加了换行,这不符合Dockerfile文件的格式,使用的时候把注释和换行去掉,不然会报错。

4.执行命令:

docker build -t test .

执行成功后,这个java程序镜像就创建起来了。

5.运行容器:

docker run --name test -p 1099:1099 -p 5005:5005 test

-p参数是将需要用到的端口从容器映射到Linux系统。

6.容器启动起来后,在本地打开jdk安装目录的JMC,一般在bin目录下:

界面如下:

打开 文件=》连接。建立一个新的连接:

测试连接成功后,点击完成,打开新建立的连接,首页如下:

双击飞行记录器,就可以针对某一段时间进行采样分析:

采样结果截图:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3