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 -

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:操作系统级别的优先级
cpucpu运行时间
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报告。

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...