首页 > 编程语言 >java故障处理(二)可视化工具

java故障处理(二)可视化工具

时间:2023-04-13 15:33:57浏览次数:41  
标签:JMX java 虚拟机 应用程序 故障 可视化 内存 JMC VisualVM

一、JConsole: Java监视与管理控制台

命令行:jconsole

JConsole是一款基于JMX 的可视化监视、 管理工具。 它的主要功能是通过JMX的MBean( Managed Bean) 对系统进行信息收集和参数动态调整。 JMX是一种开放性的技术, 不仅可以用在虚拟机本身的管理上, 还可以 运行于虚拟机之上的软件中, 典型的如中间件大多也基于JMX来实现管理与监控。 虚拟机对JMX MBean的访问也是完全开放的, 可以使用代码调用API、 支持JMX协议的管理控制台, 或者其他符合JMX规范的软件进行访问

 

 

 

二、JHSDB:基于服务性代理的调试工具

1.案例:

#进入可视化模式
jhsdb hsdb --pid 11180  

 

 

 

三、VisualVM: 多合一故障处理工具

命令行:jvisualvm

 

VisualVM 是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。

它除了常规的运行监视、 故障处理外, 还将提供其他方面的能力, 譬如性能分析( Profiling) 。

它的通用性很强, 对应用程序实际性能的影响也较小, 使得它可以直接应用在生产环境中。 这个优点是JProfiler、 YourKit等工具无法与之媲美的。

1.VisualVM兼容范围与插件安装

VisualVM基于NetBeans平台开发工具, 所以一开始它就具备了通过插件扩展功能的能力, 有了插件扩展支持, VisualVM可以做到:

·显示虚拟机进程以及进程的配置、 环境信息( jps、 jinfo) 。

·监视应用程序的处理器、 垃圾收集、 堆、 方法区以及线程的信息( jstat、 jstack) 。

·dump以及分析堆转储快照( jmap、 jhat) 。

·方法级的程序运行性能分析, 找出被调用最多、 运行时间最长的方法。

·离线程序快照: 收集程序的运行时配置、 线程dump、 内存dump等信息建立一个快照, 可以将快照发送开发者处进行Bug反馈。

·其他插件带来的无限可能性。

2.生成、 浏览堆转储快照

在VisualVM中生成堆转储快照文件有两种方式, 可以执行下列任一操作:

·在“应用程序”窗口中右键单击应用程序节点, 然后选择“堆Dump”。

·在“应用程序”窗口中双击应用程序节点以打开应用程序标签, 然后在“监视”标签中单击“堆Dump”。

3.分析程序性能

在Profiler页签中, VisualVM提供了程序运行期间方法级的处理器执行时间分析以及内存分析。 做Profiling分析肯定会对程序运行性能有比较大的影响, 所以一般不在生产环境使用这项功能, 或者改用JMC来完成, JMC的Profiling能力更强, 对应用的影响非常轻微。 要开始性能分析, 先选择“CPU”和“内存”按钮中的一个, 然后切换到应用程序中对程序进行操作, VisualVM会记录这段时间中应用程序执行过的所有方法。 如果是进行处理器执行时间分析, 将会统计每个方法的执行次数、 执行耗时; 如果是内存分析, 则会统计每个方法关联的对象数以及这些对象所占的空间。 等要分析的操作执行结束后, 点击“停止”按钮结束监控过程,

4.BTrace动态日志跟踪

BTrace是一个很神奇的VisualVM插件, 它本身也是一个可运行的独立程序。 BTrace的作用是在不中断目标程序运行的前提下, 通过HotSpot虚拟机的Instrument功能动态加入原本并不存在的调试代码。 这项功能对实际生产中的程序很有意义: 如当程序出现问题时, 排查错误的一些必要信息时(譬如方法参数、 返回值等) , 在开发时并没有打印到日志之中以至于不得不停掉服务时, 都可以通过调试增量来加入日志代码以解决问题。 BTrace的用途很广泛, 打印调用堆栈、 参数、 返回值只是它最基础的使用形式, 在它的网站上有 使用BTrace进行性能监视、 定位连接泄漏、 内存泄漏、 解决多线程竞争问题等的使用案例, 有兴趣的 读者可以去网上了解相关信息。 BTrace能够实现动态修改程序行为, 是因为它是基于Java虚拟机的Instrument开发的。 Instrument是Java虚拟机工具接口(Java Virtual Machine Tool Interface, JVMTI) 的重要组件, 提供了一套代理(Agent) 机制, 使得第三方工具程序可以以代理的方式访问和修改Java虚拟机内部的数据。

阿里巴巴开源的诊断工具Arthas也通过Instrument实现了与BTrace类似的功能。

 

 

 

四、JMC:可持续在线的监控工具

命令行:jmc

JMC最初是BEA公司的产品, 因此并没有像VisualVM那样一开始就基于自家的Net-Beans平台来开发, 而是选择了由IBM捐赠的Eclipse RCP作为基础框架, 现在的JMC不仅可以下载到独立程序, 更常见的是作为Eclipse的插件来使用。 JMC与虚拟机之间同样采取JMX协议进行通信, JMC一方面作为JMX控制台, 显示来自虚拟机MBean提供的数据; 另一方面作为JFR的分析工具, 展示来自JFR的数据。

如果需要监控其他服务器上的虚拟机, 可在“文件->连接”菜单中创建远程连接,

这里要填写的信息应该在被监控虚拟机进程启动的时候以虚拟机参数的形式指定, 以下是一份被 监控端的启动参数样例:

-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.31.4
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

本地虚拟机与远程虚拟机进程的差别只限于创建连接这个步骤, 连接成功创建以后的操作就是完全一样的了。 把“JVM浏览器”面板中的进程展开后, 可以看到每个进程的数据都有MBean和JFR两个 数据来源。 关于MBean这部分数据, 与JConsole和VisualVM上取到的内容是一样的, 只是展示形式上 有些差别.

飞行记录报告里包含以下几类信息: ·一般信息: 关于虚拟机、 操作系统和记录的一般信息。

·内存: 关于内存管理和垃圾收集的信息。

·代码: 关于方法、 异常错误、 编译和类加载的信息。

·线程: 关于应用程序中线程和锁的信息。

·I/O: 关于文件和套接字输入、 输出的信息。

·系统: 关于正在运行Java虚拟机的系统、 进程和环境变量的信息。

·事件: 关于记录中的事件类型的信息, 可以根据线程或堆栈跟踪, 按照日志或图形的格式查看。

JFR的基本工作逻辑是开启一系列事件的录制动作, 当某个事件发生时, 这个事件的所有上下文数据将会以循环日志的形式被保存至内存或者指定的某个文件当中, 循环日志相当于数据流被保留在一个环形缓存中, 所以只有最近发生的事件的数据才是可用的。 JMC从虚拟机内存或者文件中读取并展示这些事件数据, 并通过这些数据进行性能分析。

 

 

 

标签:JMX,java,虚拟机,应用程序,故障,可视化,内存,JMC,VisualVM
From: https://www.cnblogs.com/wangbin2188/p/17315001.html

相关文章

  • Java里的数据类型都有哪些
    相关面试题我们从学习Java开始,很快就会遇到Java中的数据类型这个问题。关于数据类型,对于初学者来说,很容易记混,因为Java中的数据类型划分的有点多。所以在招聘初级程序员时,面试官就会经常在这一块出一些题目,对求职者进行基础语法方面的考核。常见的数据类型相关的面试题如下:请说一......
  • java故障处理(一)基础命令行工具
     一、基础命令行工具1.jps:虚拟机进程状况工具可以列出本机正在运行的虚拟机进程,并显示主类1.1.选项:选项作用-q省略主类,只显示id-l显示主类全名,或jar包路径-m显示传递给主类main方法的参数-v输出jvm启动时所有参数2.jstat:虚拟机统计信息监控用于监......
  • JAVA返回前端时候bean转json时首字母、第二个字母大写会自动变成小写的问题
      后台bean是privateStringuName;但是前端生成的json是uname会自动变成小写 如果我们只是个别的几个的话,只需要加个注解@JsonProperty("uName")privateStringuName; 这样就可以了......
  • 如何实现 Java SpringBoot 自动验证入参数据的有效性
    JavaSpringBoot通过javax.validation.constraints下的注解,实现入参数据自动验证如果碰到@NotEmpty否则不生效,注意看下@RequestBody前面是否加上了@ValidValidation常用注解汇总Constraint详细信息@Null被注释的元素必须为null@NotNull被注释的元素必须不......
  • mysql主从故障恢复
    之前遇到过一次Slave_SQL_Running:no的情况,解决方法请参考:https://www.cnblogs.com/sxFu/p/16022876.html而这次遇到的故障为:Slave_IO_Running:no一方面原因是因为网络通信的问题也有可能是日志读取错误的问题 再看错误信息可以判断为日志读取错误的问题 解决办法1、......
  • 百度编辑器粘贴图片自动上传到服务器(Java版)
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • JAVA使用OpenOffice文件转换
    下载jar包maven中央仓库包不支持docx文件所以不建议使用。jar包是为了方便链接下载链接:https://nchc.dl.sourceforge.net/project/jodconverter/JODConverter/2.2.2/jodconverter-2.2.2.zip 解压后找到:jodconverter-2.2.2\jodconverter-2.2.2\lib\jodconverter-2.2.2.jar放......
  • 4、Web前端学习规划:JavaScript - 学习规划系列文章
          JavaScript作为Web前端里的第3重要的语言,笔者认为该重点进行学习。因为JavaScript衍生出来的框架和类库有不少,而且很强大。所以JavaScript的学习要抓好重点,在基本的语法及应用上学习相关的框架和类库,更好的为Web前端的开发应用做好准备。 1、简介;JavaSc......
  • Java 深拷贝浅拷贝
    Arrays.copyOf()方法在底层是调用了System.arraycopy() 对于基本数据类型来说System.arraycopy()方法是深拷贝,对于引用数据类型来说System.arraycopy()方法是浅拷贝。总结:拷贝方式数值类型引用类型推荐使用for循环深拷贝浅拷贝 copyOf深拷贝浅拷贝推荐......
  • 用java做一个并发10W的网站,需要用到的技术有这些!
        你需要使用以下技术和工具:JavaWeb框架:选择一个性能高、可扩展性好、易于使用和维护的JavaWeb框架,如SpringMVC、Struts2、PlayFramework等。数据库:使用高性能的数据库系统,如MySQL、PostgreSQL、Oracle等。使用数据库连接池可以提高性能。缓存:使用缓存可......