JVM往期文章
- 【JVM进阶之路】内存结构(一)
- 【JVM进阶之路】玩转JVM中的对象(二)
- 【JVM进阶之路】垃圾回收机制和GC算法之三色标记(三)
- 【JVM进阶之路】类加载和双亲委派模型(四)
- 【JVM进阶之路】方法调用的底层实现之面试必问重载与重写的区别(五)
前言
在开发,运行Java应用时,难免会遇到应用运行性能低效,内存泄露等问题,那么我们就需要借助分析工具去分析,优化应用系统,也就是常说的性能调优,而JDK自带的诊断工具可以有效的帮助我们快速定位问题。如:jps,jstack,jinfo
等。
可以看到,这些工具在 windows 上,就是 exe。而在 linux 中,一般自带了 OpenJDK,一般情况下 JPS 等命令不能用,要么选择去安装 JPS 等插件,要么把 OpenJDK 卸载,去重新安装 Oracle 的 JDK,个人建议是后者,毕竟后者只需要安装一次就包含了所有。
需要注意的是,这些工具大部分都是命令行工具,但也有可视化工具,如jconsol
,visualvm
。
命令行工具
jps
java提供的一个显示当前所有java进程pid的命令,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)。
语法:jps [options] <pid>
[options]
选项:官方文档
-q
:仅仅显示进程。-m
:输出主函数传入的参数。-l
:输出应用程序主类完整package
名称或jar
完整名称。-v
:列出 JVM参数。
jstat
是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI 图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。简单来说就是可以查看堆内存各部分的使用量,以及加载类的数量。
语法:jstat [options] [vmid] [间隔时间/毫秒] [查询次数]
[options]
选项:官方文档
-
-class
: 显示有关类加载器行为的统计信息。 -
-compiler
:显示有关 Java HotSpot VM Just-in-Time(JIT) 编译器行为的统计信息。 -
-gc
:显示有关垃圾收集堆行为的统计信息。 -
-gccapacity
:显示各区大小。