JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

前言

在查询JVM相关问题的时候少不了jps、jstat、jinfo、jmap、jhat、jstack等命令工具。本文将会详细介绍这些命令工具的使用。

jps

列出当前机器上正在运行的虚拟机进程,JPS 从操作系统的临时目录上去找。

-q :仅仅显示进程,

-m:输出主函数传入的参数. 下的 hello 就是在执行程序时从命令行输入的参数

-l: 输出应用程序主类完整 package 名称或 jar 完整名称.

-v: 列出 jvm 参数, -Xms20m -Xmx50m 是启动程序指定的 jvm 参数

示例:

JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jstat

是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。

假设需要每 250 毫秒查询一次进程 13616 垃圾收集状况,一共查询 10 次,那命令应当是:jstat -gc 13616 250 10 常用参数:

-class (类加载器)

-compiler (JIT)

-gc (GC 堆状态)

-gccapacity (各区大小)

-gccause (最近一次 GC 统计和原因)

-gcnew (新区统计)

-gcnewcapacity (新区大小)

-gcold (老区统计)

-gcoldcapacity (老区大小)

-gcpermcapacity (永久区大小)

-gcutil (GC 统计汇总)

-printcompilation (HotSpot 编译统计)

示例:

JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jinfo

查看和修改虚拟机的参数

jinfo –sysprops 可以查看由 System.getProperties()取得的参数

jinfo –flag 未被显式指定的参数的系统默认值

jinfo –flags(注意 s)显示虚拟机的参数

jinfo –flag +[ 参 数 ] 可 以 增 加 参 数 , 但 是 仅 限 于 由 java -XX:+PrintFlagsFinal –version 查 询 出 来 且为 manageable 的参数

jinfo –flag -[参数] 可以去除参数


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

java -XX:+PrintFlagsFinal –version执行结果


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jmap

用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。jmap 的作用并不仅仅是为了获取 dump 文件,它还可以查询 finalize 执行队列、Java 堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。和 jinfo 命令一样,jmap 有不少功能在 Windows 平台下都是受限的,除了生成 dump 文件的-dump 选项和用于查看每个类的实例、空间占用统计的-histo 选项在所有操作系统都提供之外,其余选项都只能在 Linux/Solaris 下使用。

jmap -dump:live,format=b,file=heap.bin

Sun JDK 提供 jhat(JVM Heap Analysis Tool)命令与 jmap 搭配使用,来分析 jmap 生成的堆转储快照。


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jhat

jhat dump 文件名

后屏幕显示“Server is ready.”的提示后,用户在浏览器中键入 http://localhost:7000/就可以访问详情


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

使用 jhat 可以在服务器上生成堆转储文件分析(一般不推荐,毕竟占用服务器的资源,比如一个文件就有 1 个 G)

jstack

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。在代码中可以用 java.lang.Thread 类的 getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement 对象。使用这个方法可以通过简单的几行代码就完成 jstack 的大部分功能,在实际项目中不妨调用这个方法做个管理员页面,可以随时使用浏览器来查看线程堆栈。



下面介绍两个可视化工具:

JMX

JMX(Java Management Extensions,即 Java 管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX 可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

管理远程进程需要在远程程序的启动参数中增加:

-Djava.rmi.server.hostname=…..

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=8888

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Jconsole

工具目录:在JDK的bin目录下面


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

visualvm

工具目录:在JDK的bin目录下面

插件中心地址:https://visualvm.github.io

但是注意版本问题,不同的 JDK 所带的 visualvm 是不一样的,下载插件时需要下对应的版本。一般来说,这个工具是本机调试用,一般生产上来说,你一般是用不了的(除非启用远程连接)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM实操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


分享到:


相關文章: