上篇:JVM学习总结,全面介绍运行时数据区域、各类垃圾收集器的原理使用、内存分配回收策略
参考资料:《深入理解Java虚拟机》第三版
文章目录
常用工具一图流:
三,虚拟机性能监控、故障处理工具
给一个系统定位问题的时候,知识、经验是关键基础,数据是依赖,工具则是运用知识处理数据的手段。这里说的数据包括但不限于异常堆栈、虚拟机运行日志、垃圾收集器日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、定位并解决问题的效率,但我们在学习工具之前,也应该意识到工具永远都是知识技能的一层包装。
总所周知JDK的bin目录中有java.exe
、javac.exe
这两个命令行工具,随着JDK的版本迭代,这些小工具的数量与功能也在不断的增强中。除了编译与运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都有可能会遇到它们(展示的是jdk17):
1)jps:虚拟机进程状况工具
JDK很多小工具的命名都参考了UNIX命令的命名方式,jps(JVM Process Status Tool)则是其中的典型,除了命令像UNIX的ps命令之外,它的功能也与之类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。
虽然jps的功能比较单一,但其绝对是使用得最多的命令行工具之一,对于本地虚拟机进程来说LVMID与操作系统的进程ID(PID,Process Identifier)是一致的,使用windows的任务管理器或者UNIX的ps -ef|grep、losf -i:[host port]
命令也可以查询到虚拟机进程的LVMID,但如果同时启动了多个虚拟机进程,无法根据进程名称来进行定位时,那就必须依赖jps命令显示主类的功能才能去区分了。
# 通过此命令可以查看虚拟机上所有运行的Java进程,有时候我们不知道端口或者应用名称,就可以使用这个命令查看Java进程的PID
jps [options] [hostid]
# 参数options
-q # 只输出LVMID
-m # 输出虚拟机进程启动时传递给主类main()函数的参数
-l # 输出主类的全名,如果进程执行的是jar包,则输出jar的路径
-v # 输出虚拟机进程启动时的JVM参数
-V # 输出仅包含本地JVM标识符的列表