java常见面试考点(三十三):常用的JVM监控和性能分析工具

java常见面试考点

往期文章推荐:
  java常见面试考点(二十八):内部类详解
  java常见面试考点(二十九):进程和线程的区别
  java常见面试考点(三十):异常
  java常见面试考点(三十一):连接池的作用
  java常见面试考点(三十二):诊断生产环境服务器变慢


【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);

本博客的内容来自于:java常见面试考点(三十三):常用的JVM监控和性能分析工具

学习、合作与交流联系q384660495;

本博客的内容仅供学习与参考,并非营利;


一、JVM 命令行工具

以下是较常用的 JDK 命令行工具:

名称描述
jpsJVM 进程状态工具。显示系统内的所有 JVM 进程。
jstatJVM 统计监控工具。监控虚拟机运行时状态信息,它可以显示出 JVM 进程中的类装载、内存、GC、JIT 编译等运行数据。
jmapJVM 堆内存分析工具。用于打印 JVM 进程对象直方图、类加载统计。并且可以生成堆转储快照(一般称为 heapdump 或 dump 文件)。
jstackJVM 栈查看工具。用于打印 JVM 进程的线程和锁的情况。并且可以生成线程快照(一般称为 threaddump 或 javacore 文件)。
jhat用来分析 jmap 生成的 dump 文件。
jinfoJVM 信息查看工具。用于实时查看和调整 JVM 进程参数。
jcmdJVM 命令行调试 工具。用于向 JVM 进程发送调试命令。

二、jps

jps(JVM Process Status Tool) (opens new window)是虚拟机进程状态工具。它可以显示指定系统内所有的 HotSpot 虚拟机进程状态信息。jps 通过 RMI 协议查询开启了RMI 服务的远程虚拟机进程状态。

jps 命令用法

jps [option] [hostid]
jps [-help]

如果不指定 hostid 就默认为当前主机或服务器。

常用参数:

option - 选项参数
-m - 输出 JVM 启动时传递给 main() 的参数。
-l - 输出主类的全名,如果进程执行的是 jar 包,输出 jar 路径。
-v - 显示传递给 JVM 的参数。
-q - 仅输出本地 JVM 进程 ID。
-V - 仅输出本地 JVM 标识符。 hostid - RMI 注册表中注册的主机名。如果不指定 hostid 就默认为当前主机或服务器。 其中 option、hostid 参数也可以不写。

三、jstat

jstat(JVM statistics Monitoring) (opens new window),是虚拟机统计信息监视工具。jstat用于监视虚拟机运行时状态信息,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据

jstat 命令用法

jstat [option] VMID [interval] [count]

常用参数:

option - 选项参数,用于指定用户需要查询的虚拟机信息
-class - 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-compiler:显示 JIT 编译的相关信息;
-gc:监视 Java 堆状况,包括 Eden 区、两个 survivor 区、老年代、永久代等区的容量、已用空间、GC 时间合计等信息。
-gccapacity:显示各个代的容量以及使用情况;
-gcmetacapacity:显示 Metaspace 的大小;
-gcnew:显示新生代信息;
-gcnewcapacity:显示新生代大小和使用情况;
-gcold:显示老年代和永久代的信息;
-gcoldcapacity:显示老年代的大小;
-gcutil:显示垃圾回收统计信息;
-gccause:显示垃圾回收的相关信息(通 -gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
-printcompilation:输出 JIT 编译的方法信息。 VMID - 如果是本地虚拟机进程,则 VMID 与 LVMID 是一致的;如果是远程虚拟机进程,那 VMID
的格式应当是:[protocol:][//]lvmid[@hostname[:port]/servername] interval -
查询间隔 count - 查询次数

更多可以参考jstat命令查看jvm的GC情况 (以Linux为例)

四、jmap

jmap(JVM Memory Map) (opens new window)是 Java 内存映像工具。jmap用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。jmap 不仅能生成 dump 文件,还可以查询 finalize执行队列、Java 堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

如果不使用这个命令,还可以使用 -XX:+HeapDumpOnOutOfMemoryError 参数来让虚拟机出现 OOM 的时候,自动生成dump 文件

jmap 命令用法
命令格式:

jmap [option] pid

option 选项参数:

-dump - 生成堆转储快照。-dump:live 只保存堆中的存活对象。
-finalizerinfo - 显示在 F-Queue 队列等待执行 finalizer 方法的对象
-heap - 显示 Java 堆详细信息。
-histo - 显示堆中对象的统计信息,包括类、实例数量、合计容量。-histo:live 只统计堆中的存活对象。
-permstat - to print permanent generation statistics
-F - 当-dump 没有响应时,强制生成 dump 快照

五、jstack

jstack(Stack Trace for java) (opens new window)是 Java 堆栈跟踪工具。jstack 用来打印目标 Java 进程中各个线程的栈轨迹,以及这些线程所持有的锁,并可以生成 java 虚拟机当前时刻的线程快照(一般称为 threaddump 或 javacore 文件)。

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

jstack 命令用法:

jstack [option] pid

option 选项参数

-F - 当正常输出请求不被响应时,强制输出线程堆栈
-l - 除堆栈外,显示关于锁的附加信息
-m - 打印 java 和 jni 框架的所有栈信息

六、jinfo

jinfo(JVM Configuration info) (opens new window),是 Java 配置信息工具。jinfo用于实时查看和调整虚拟机运行参数。如传递给 Java 虚拟机的-X(即输出中的 jvm_args)、-XX参数(即输出中的 VM Flags),以及可在 Java 层面通过System.getProperty获取的-D参数(即输出中的 System Properties)
之前的 jps -v 口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用 jinfo 口令。

jinfo 命令格式:

jinfo [option] pid

option 选项参数:

-flag - 输出指定 args 参数的值
-sysprops - 输出系统属性,等同于 System.getProperties()

七、jhat

jhat(JVM Heap Analysis Tool),是虚拟机堆转储快照分析工具。jhat 与 jmap 搭配使用,用来分析 jmap 生成的 dump 文件。jhat 内置了一个微型的 HTTP/HTML 服务器,生成 dump 的分析结果后,可以在浏览器中查看。

注意:一般不会直接在服务器上进行分析,因为 jhat 是一个耗时并且耗费硬件资源的过程,一般把服务器生成的 dump 文件,用 jvisualvm 、Eclipse Memory Analyzer、IBM HeapAnalyzer 等工具来分析。

八、jcmd

查看正在运行的 Java 进程ID、名称和 main 函数参数

$ jcmd
7200 sun.tools.jcmd.JCmd
10614 com.install4j.runtime.launcher.MacLauncher
88348 org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.14

注意,7200 进程是jcmd本身。执行完jcmd后,该进程已经结束了。

查看某个进程支持的命令:在jcmd 后加上进程 ID,然后加上 help 。

$ jcmd 10614 help

查看 JVM 进程信息

$ jcmd 10614 VM.info

建议进程进行垃圾回收

$ jcmd 10614 GC.run

更多用法可以参考:Java : jcmd 命令的使用

九、jconsole

查看虚拟机的使用情况,是GUI界面,不多做介绍

jconsole

十、jvisualvm

jconsole的升级版

jvisualvm

参考资料

JVM 命令行工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的爱人是绿色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值