记得 2014 年我在写大宗期货交易平台的时候,遇到了一些棘手的问题,可能是因为我的并发编程知识掌握的不够扎实,导致出现了内存泄漏的问题。
当时排查了好久,用的工具就是 JDK 自带的 jconsole,之前也没有过类似的性能监控经验,就导致在查找问题的时候非常痛苦,至今印象深刻。
那今天我们就从工具篇出发,来看看这些命令行工具的具体使用方法,以及如何排查问题。
JDK 性能监控工具
除了我们的老朋友 java 和 javac 命令,在 Java 的 bin 目录下,还有很多其他的命令行工具,比如说用于性能监控的 jps、jstat、jinfo、jmap、jstack、jcmd 等等。
我用的 macOS,Windows 用户看到的可能是带有 .exe 结尾的,但是功能都是一样的,我就不再刻意去截图了。
接下来,我来给大家一一介绍一下这些工具的用途,认个脸熟。
jps:查看虚拟机进程
jps(Java Virtual Machine Process Status Tool)类似 Linux 下的 ps,用于快速查看哪些 Java 应用正在运行,以及它们的进程 ID,这对于进一步使用其他 JVM 工具进行诊断是必要的。
jps 命令格式:
jps [ options ] [ hostid ]
jps 命令示例:
①、注意看第三个进程正是我本地运行着的技术派实战项目,一个前后端分离的 Spring Boot+React 的社区项目,帮助不少球友拿到了心仪的校招 Offer。
②、pid 是什么?pid 是进程 ID,是操作系统分配给进程的唯一标识符,可以用来查看进程的详细信息。
通常情况下,我们关闭一个进程可以通过右上角的 X 号来完成,但有了 pid,我们可以直接在命令行通过 kill 命令来关闭进程,比如:
kill -9 pid
意思是强制关闭 pid 对应的进程,新手可千万别在生产环境下乱 kill 哈(😂)。
再来看一下 jps 的常用选项:
选项列表 | 描述 |
---|---|
-q | 只输出进程 ID,忽略主类信息 |
-l | 输出主类全名,或者执行 JAR 包则输出路径 |
-m | 输出虚拟机进程启动时传递给主类 main() 方法的参数 |
-v | 输出虚拟机进程启动时的 JVM 参数 |
jstat:查看 JVM 运行时信息
jstat(Java Virtual Machine Statistics Monitoring Too
回复