当前位置: 首页 > 图灵资讯 > java面试题> JVM高频面试题-了解哪些性JVM监控和故障处理工具?

JVM高频面试题-了解哪些性JVM监控和故障处理工具?

来源:图灵教育
时间:2023-11-11 09:24:21
 

了解哪些性JVM监控和故障处理工具?

 

以下是一些JDK自带的可视化性能监控和故障处理工具:

 

  • JConsole

Jconsole 是一个内置 Java 性能分析器,是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来对java进程提供实时的性能和资源的监控。其监控内容包括:内存、线程、类、CPU使用(Java进程的内存使用,线程的状态,类的使用)等。通过监控信息,可以很清晰的了解到当前程序是否运行正常,如内存泄露、死锁、类加载异常等

 

备注:Jconsole管理内存相当于可视化的jstat命令

 

JConsole概览

 

开启远程:

java -jar xxx.jar

  • -Dcom.sun.management.jmxremote 远程开启开关
  • -Dcom.sun.management.jmxremote.port=1808 jmx远程调用端口
  • -Dcom.sun.management.jmxremote.authenticate=false 不开启验证
  • -Dcom.sun.management.jmxremote.ssl=false 不为ssl连接
  • -Djava.rmi.server.hostname=34.126.141.21 服务器所在ip或者域名

 

  • VisualVM(jvisualvm)

VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析 .

JMC主要界面

  • jps
    • 查看java进程
  • jstat
    • jstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用形式:
    • jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
    • 如:jstat-gc 13616 100 8;
    • 常用参数:
      • -class (类加载器)
      • -compiler (JIT)
      • -gc (GC 堆状态)
      • -gccapacity (各区大小)
      • -gccause (最近一次 GC 统计和原因)
      • -gcnew (新区统计)
      • -gcnewcapacity (新区大小)
      • -gcold (老区统计)
      • -gcoldcapacity (老区大小)
      • -gcpermcapacity (永久区大小)
      • -gcutil (GC 统计汇总)
      • -printcompilation (HotSpot 编译统计)

 

  • jmap
    • jmap用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalize 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
      • heap : 显示Java堆详细信息
      • histo : 显示堆中对象的统计信息
      • permstat :Java堆内存的永久保存区域的类加载器的统计信息
      • finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行 finalizer方法的对象
      • dump : 生成堆转储快照
jmap -dump:file=d:\user.hprof 1246
  • jhat
    • jhat dump 文件名

      后屏幕显示“Server is ready.”的提示后,用户在浏览器中键入 http://localhost:7000/就可以访问详情。
  • jstack

jstack [vmid]
jstack用于生成虚拟机当前时刻的线程快照。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。

一般来说 jstack 主要是用来排查是否有死锁和某个进程的线程调用栈的情况

 

除此之外,还有一些第三方的工具:

  • MATJava 堆内存分析工具。
  • GChistoGC 日志分析工具。
  • GCViewer GC 日志分析工具。
  • JProfiler商用的性能分析利器。
  • arthas阿里开源诊断工具。
  • async-profilerJava 应用性能分析工具,开源、火焰图、跨平台。