• jvm监控工具小结


    jdk自带工具

    命令行工具

    Jps

    功能描述:
    jps是用于查看有权访问的hotspot虚拟机的进程。当未指定hostid时,默认查看本机jvm进程,否则查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。jps可以列出jvm进程lvmid、主类类名、main函数参数、jvm参数、jar名称等信息。
    命令用法:
    jps [options] [hostid]
    主要选项:
    没添加option的时候,默认列出VM标示符号和简单的class或jar名称.
    -q:仅输出VM标识符,不包括classname、jar name、arguments in main method
    -m:输出main method的参数
    -l:输出完全的包名,应用主类名,jar的完全路径名
    -v:输出jvm参数

    Jstat

    功能描述:
    它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
    命令用法:
    jstat -

    S0C:第一个幸存区的大小
    S1C:第二个幸存区的大小
    S0U:第一个幸存区的使用大小
    S1U:第二个幸存区的使用大小
    EC:伊甸园区的大小
    EU:伊甸园区的使用大小
    OC:老年代大小
    OU:老年代使用大小
    MC:方法区大小
    MU:方法区使用大小
    CCSC:压缩类空间大小
    CCSU:压缩类空间使用大小
    YGC:年轻代垃圾回收次数
    YGCT:年轻代垃圾回收消耗时间
    FGC:老年代垃圾回收次数
    FGCT:老年代垃圾回收消耗时间
    GCT:垃圾回收消耗总时间

    -gccapacity 堆内存统计
    -gcutil 总结垃圾回收统计

    Jinfo

    功能描述:
    jinfo的作用是实时查看和调整虚拟机各项参数。(特别可以查看未指定的默认参数)
    命令用法:
    jinfo [ option ] pid
    主要选项:
    -flags 打印虚拟机的flags参数
    无option参数 打印虚拟机的flags参数和系统属性

    Jmap

    功能描述:
    jmap命令用于生成堆转储快照(一般称为heapdump或dump文件),jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。
    命令用法:
    jmap [ option ] vmid
    主要选项:
    -histo[:live] 打印堆的柱状图
    -dump:[live,]format=b,file= 以hprof二进制格式转储Java堆到指定filename的文件中。live子选项是可选的。如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览heap dump,你可以使用MAT或者Jvisualvm读取生成的文件。
    -heap 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和generation wise heap usage。jdk9及以上版本使用jmap -heap pid命令查看当前heap使用情况时,发现报错,提示需要使用jhsdb jmap来替代

    Jhat

    jhat命令将dump出来的hprof文件转成html的形式,然后通过http访问可以查看堆情况,功能较为简陋,Jhat在jdk11中已删除,可以用jvisualVm代替。

    Jstack

    功能描述:
    jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
    命令用法:
    jstack [ option ] vmid
    主要选项:
    -l 打印锁的额外信息
    -e 打印线程的额外信息
    线程中参数解释:
    tid: Java memory address of its internal Thread control structure.16进制的
    nid: native thread id. 每一个nid对应于linux下的一个tid, 即lwp (light weight process, or thread).16进制的,转到10进制后可以用ps命令找到它。
    prio: java内定义的线程的优先级
    os_prio:操作系统级别的优先级
    cpu为cpu运行时间
    elapsed为实际运行时间
    daemon说明是守护线程

    Jcmd

    功能描述:
    多种jdk命令工具的集合
    命令用法:
    jcmd <pid | main class> <command ...|PerfCounter.print|-f file>
    主要选项:
    Thread.print 类似于jstack,打印线程快照
    GC.heap_info 打印堆内存信息
    此外还有很多其他选项,可以通过help查看每个命令的说明

    Jhsdb

    功能描述:
    jstack 、jmap、jinfo、jsnap等工具的集合
    命令用法:
    类似jstack 、jmap、jinfo、jsnap
    主要选项:
    可以通过help查看

    命令行工具小结

    java进程信息查看:jps
    java类加载、内存、垃圾收集、即时编译等运行时数据信息查看:jstat
    java虚拟机参数信息查看:jinfo
    java堆信息查看:jmap、jhsdb
    java栈信息查看:jstack、jhsdb
    命令行工具集合工具:jhsdb、jcmd

    可视化工具

    Jconsole

    功能介绍:
    Jconsole是一个基于JMX的java GUI监视工具,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM。可以监控内存、线程、类加载、jmx等。
    使用方法:
    命令行里打 jconsole,选择进程就可以了。
    Linux上的JConsole有时无法使用,需要用本地的JConsole,此时linux 启动项目时,需要添加参数。
    java
    -Djava.rmi.server.hostname=ip #远程服务器ip,即本机ip
    -Dcom.sun.management.jmxremote #允许JMX远程调用
    -Dcom.sun.management.jmxremote.port=xxx #自定义jmx 端口号
    -Dcom.sun.management.jmxremote.ssl=false # 是否需要ssl 安全连接方式
    -Dcom.sun.management.jmxremote.authenticate=false #是否需要秘钥
    -jar test.jar
    本地启动jconsole后选择远程进程并填写ip和上面指定的jmx端口,开启远程监控。

    JvisualVm

    VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,是功能最强大的运行监控和故障处理程序之一,曾经很长一段时间是oracle官方主力发展的虚拟机故障处理工具。功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势、内存消耗详细状况。在高版本JDK(大于1.8或后期更新的1.8版本)中已经不会再自动集成 VisualVM,需要独立下载。

    第三方工具

    Eclipse MAT

    功能介绍:
    MAT(Memory Analyzer Tool)是基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,可以生成各种内存检查报告,它可以帮助我们查找内存泄漏和减少内存消耗。

    Arthas

    功能介绍:
    Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。

    GCeasy

    GCeasy是一个线上GC分析工具,基于jvm输出的GC日志产生GC报告。

    Prometheus

    在springboot服务中引入依赖,引入io.micrometer和springboot actuator相关依赖,然后再prometheus中修改配置接入参数,最后再grafana上导入数据源,通过“jvm-micrometer_rev9”模板查看jvm参数即可

    结论

    Jvm诊断工具使用建议:
    性能诊断与调优:Arthas可以随产品布设于测试和生产环境,随时开启进行性能诊断。
    可视化监控:开发环境可以利用jconsole或者jvisualVM实时可视化监控远程进程,测试和生产环境可以使用Prometheus+grafana,实现JVM的可视化监控和问题追溯。
    Heap dump分析:利用Eclipse MAT进行Heap dump分析可以生成各类内存分析报告;
    GC日志分析:基于GC日志,可以利用线上工具GCeasy生成GC报告。

  • 相关阅读:
    ZOJ 1403 解密
    HDU 1021 斐波那契
    Wannafly挑战赛26题解
    NOI2019省选模拟赛 第三场
    NOI2019省选模拟赛 第五场
    洛谷P5280 [ZJOI2019]线段树(线段树)
    NOI2019省选模拟赛 第六场
    Wannafly挑战赛29题解
    李超线段树学习笔记
    洛谷P4069 [SDOI2016]游戏(李超线段树)
  • 原文地址:https://www.cnblogs.com/lllliuxiaoxia/p/15799378.html
Copyright © 2020-2023  润新知