Java的JMC和飞行记录器FlightRecord |
您所在的位置:网站首页 › 去哪儿查看飞行记录信息呢 › Java的JMC和飞行记录器FlightRecord |
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 |