正文

一、JDK 的命令行工具

JDK 的 bin 目录下提供了一些用于监视虚拟机和故障处理的命令行工具。

名称 主要作用
jps JVM Process Status Tool,显示正在运行的虚拟机进程
jstat JVM Statistics Monitoring Tool,收集虚拟机各方面的运行数据
jinfo Configuration Info for Java,显示虚拟机配置信息
jmap Memory Map for Java,生成虚拟机的内存转储快照(heapdump 文件)
jhat JVM Heap Dump Browser,用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,可在浏览器上查看分析结果
jstack Stack Trace for Java,显示虚拟机的快照进程

1、jps:虚拟机进程状况工具

jps 作用:

列出正在运行的虚拟机进程,并显示虚拟机进程执行主类(main() 函数所在的类)名称以及进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier,LVMID)。对于本地虚拟机进程,LVMID 与操作系统进程 ID(PID)一致。

jps 命令格式:

jps [options] [hostid]
  • options:选项,可多个。
  • hostid:jps 可以通过 RMI 协议查询开启了 RMI 服务的远程虚拟机进程状态,hostid 为 RMI 注册表中注册的主机名。

jps 执行样例:

root@█████████:~# jps -l
16657 halo-latest.jar
20498 org.apache.catalina.startup.Bootstrap
16669 sun.tools.jps.Jps

jps 选项:

选项 作用
-q 只输出 LVMID,省略主类的名称
-m 输出虚拟机进程启动时,传递给主类 main() 函数的参数
-l 输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径
-v 输出虚拟机进程启动时 JVM 参数

PS: 也不知道是不是我的打开方式不对,在 Win7、Win10 下用 JDK1.6、1.7、1.8 测试时,输出的是 Jar 文件名,而不是 Jar 路径。

2、jstat:虚拟机统计信息监视工具

jstat 作用:

用于监视虚拟机各种运行状态信息。可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。

jstat 命令格式:

jstat <option> <vmid> [interval[s|ms] [count]]
  • option:选项,代表用户希望查询的虚拟机信息,主要分为 3 类:类装载、垃圾收集、运行期编译状况。
  • vmid:虚拟机唯一 ID(VMID),如果是本地虚拟机进程,那么 VMID 与 LVMID 一致,如果是远程虚拟机进程,那么 VMID 的格式为:[protocol:][//]lvmid[@hostname][:port]/servername
  • interval:查询间隔。
  • count:查询次数。同时省略 interval 和 count 时,表示只查询一次。

jstat 执行样例:

root@█████████:~# jstat -gcutil 20498
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
14.14 0.00 91.33 96.52 96.90 93.32 1210 7.328 6 0.536 7.864

jstat 选项:

选项 作用
-class 显示类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 显示 Java 堆状况,包括各个区域的容量、已用空间、GC 时间合计等
-gccapacity 显示 Java 堆各个区域的最大、最小(初始化)容量
-gcutil 显示 Java 堆各个区域的已使用空间占总空间的百分比
-gccause 与 -gcutil 功能一样,但会额外输出导致上一次 GC 产生的原因
-gcnew 显示新生代 GC 状况
-gcnewcapacity 显示新生代最大、最小(初始化)容量
-gcold 显示老年代 GC 状况
-gcoldcapacity 显示老年代最大、最小(初始化)容量
-gcpermcapacity 显示永久代最大、最小(初始化)容量
-compiler 显示 JIT 编译器编译过的方法、耗时等信息
-printcompilation 显示已被 JIT 编译的方法

3、jinfo:Java 配置信息工具

jinfo 作用:

实时地查看和调整虚拟机各项参数。

jinfo 命令格式:

jinfo [option] <pid>
  • option:选项。
  • pid:虚拟机进程 ID。

jinfo 执行样例:

root@█████████:~# jinfo -flag MaxHeapSize 20498
-XX:MaxHeapSize=260046848

jinfo 选项:

选项 作用
-flag <name> 显示指定 name 的虚拟机参数
-flag [+|-]<name> 启用或禁用指定 name 的虚拟机参数
-flag <name>=<value> 设置指定 name 的虚拟机参数值
-flags 显示所有的虚拟机参数
-sysprops 显示虚拟机进程的系统变量,即 System.getProperties() 的内容
显示所有虚拟机参数及系统变量

4、jmap:Java 内存映像工具

jmap 作用:

主要用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。除此之外,还可以查询 finalize 执行队列、Java 堆和永久代的详细信息。

jmap 命令格式:

jmap [option] <vmid>
  • option:选项。
  • vmid:虚拟机进程唯一 ID。

jmap 执行样例:

root@█████████:~# jmap -dump:format=b,file=test.bin 20498
Dumping heap to /root/test.bin ...
Heap dump file created

jmap 选项:

选项 作用
-dump 生成 Java 堆转储快照。格式为:-dump:[live,]format=b,file=<filename>,live 子参数表示是否只 dump 出存活的对象
-finalizerinfo 显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象
-heap 显示 Java 堆详细信息,如使用哪种回收器、参数配置、分代状况等
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat 以 ClassLoader 为统计口径显示永久代内存状况,JDK1.8 改为 -clstats
-F 当虚拟机进程对 -dump 选项没有响应时,可使用该选项强制生成 dump 快照

5、jhat:虚拟机堆转储快照分析工具

jhat 作用:

用于分析 jmap 生成的堆转储快照。jhat 内置了一个微型的 HTTP/HTML 服务器,生成 dump 文件分析结果后,可在浏览器中查看。

jhat 命令格式:

jhat [option] <file>
  • option:选项。
  • file:堆转储快照文件。

jhat 执行样例:

root@█████████:~# jhat test.bin
Reading from test.bin...
Dump file created Tue Dec 17 21:49:26 CST 2019
Snapshot read, resolving...
Resolving 979375 objects...
Chasing references, expect 195 dots...................................................................................................................................................................................................
Eliminating duplicate references...................................................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

在浏览器中输入 http://IP地址:7000 即可查看分析结果。

6、jstack:Java 堆栈跟踪工具

jstack 作用:

用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或 javacore 文件)。线程快照是当前虚拟机内每一条线程正在执行的方法堆栈的集合。

生成线程快照的主要目的是定位线程出现长时间停顿的原因。当线程出现停顿时,通过 jstack 查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstack 命令格式:

jstack [option] <vmid>
  • option:选项。
  • vmid:虚拟机进程唯一 ID。

jstack 执行样例(部分结果):

root@█████████:~# jstack -l 20498
2019-12-17 22:08:31
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.141-b15 mixed mode): "Attach Listener" #7966 daemon prio=9 os_prio=0 tid=0x00007f0a54037800 nid=0xf15 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None
...

jstack 选项:

选项 作用
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示 C/C++ 的堆栈

二、JDK的可视化工具

JDK 提供了两个功能强大的可视化工具:JConsole 和 VisualVM。

1、JConsole:Java 监视与管理控制台

(1)启动 JConsole

通过 JDK/bin 目录下的“jconsole.exe”启动 JConsole 后,将自动搜索出本机运行的所有虚拟机进程,不需要用户自己使用 jps 查询。双击选择其中一个进程即可开始监控,也可使用“远程进程”功能来连接远程服务器,对虚拟机进行监控。

“概述”页签显示的是整个虚拟机主要运行数据的概览。

(2)内存监控

“内存”页签相当于可视化的 jstat 命令,用于监视受收集器管理的虚拟机内存的变化趋势。

(3)线程监控

“线程”页签相当于可视化的 jstack 命令,遇到线程停顿时可使用该页签进行监控分析。

2、VisualVM:多合一故障处理工具

VisualVM 除了默认提供的监视、线程等功能外,还可以安装扩展插件来集成更多功能。

(1)启动 VisualVM

通过 JDK/bin 目录下的“jvisualvm.exe”启动 VisualVM 后,选择一个需要监视的程序即可进入主界面。

“概述”页签用于显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。

(2)运行监视

“监视”页签和“线程”页签,用于监视应用程序的 CPU、内存、类以及线程的信息(jstat、jstack)。

(3)生成、浏览堆转储快照

在 VisualVM 中生成 dump 文件有两种方式:

  • 右键单击应用程序节点,选择“堆 Dump”。

  • 在“监视”页签中单击“堆 Dump”。

生成 dump 文件后,将在应用程序下增加一个以 [heapdump] 开头的子节点,并且在主页签中打开该转储快照。如果需要保存 dump 文件,要在 heapdump 节点上右键选择“另存为”。否则当 VisualVM 关闭时,生成的 dump 文件也会被删除掉。

(4)分析程序性能

“Profiler”页签中,VisualVM 提供了程序运行期间方法级的 CPU 执行时间分析以及内存分析。

《深入理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具的更多相关文章

  1. 深入理解Java虚拟机之读书笔记四 性能监控与故障处理工具

    JDK的bin目录下存在很多有效的命令行工具,它们就是jdk\lib\toos.jar类库的封装. 一.jps:虚拟机进程状况工具,查询出LVMID. 二.jstat:虚拟机统计信息监视工具, 三.j ...

  2. 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

    虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...

  3. java虚拟机之性能监控与故障处理工具

    sun jdk性能监控与故障处理工具 jps: 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id. jstat: 用于监视虚拟机各种运行状态信息的命令航工具.它可 ...

  4. JYM虚拟机性能监控与故障处理工具

    虚拟机性能监控与故障处理工具 一.jps:虚拟机进程状况工具 常用指令 二.jstat:虚拟机统计信息监视工具 常用指令 三.jinfo:配置信息工具 四.jmap:Java内存映像工具 常用指令 五 ...

  5. 第八章 JVM性能监控与故障处理工具(2)

    注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...

  6. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  7. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  8. JVM(4) 虚拟机性能监控与故障处理工具

    1. Sun JDK 监控和故障处理工具 1)jps:JVM process Status Tool,显示指定系统内所有的HotSpot虚拟机进程.可以列出正在运行的虚拟机进程,并显示虚拟机执行主类( ...

  9. 《深入理解Java虚拟机》笔记--第四章、虚拟机性能监控与故障处理工具

    主要学习并记录在命令行中操作服务器时使用的六大命令工具,可视化工具JConsole和VisualVM在开发过程中熟悉. 一.jps:虚拟机进程状况工具(JVM Process Status Tool) ...

随机推荐

  1. poj 3278(hdu 2717) Catch That Cow(bfs)

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. 符合阿里巴巴代码规范的checkstyle检测文件

    一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...

  3. python基础十一之迭代器和生成器

    可迭代 内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然. print(dir('')) # dir()函数可以获取当前数据类型的所有内置方法 返回值 ...

  4. 2018-12-14-恢复-U-盘隐藏文件夹

    title author date CreateTime categories 恢复 U 盘隐藏文件夹 lindexi 2018-12-14 19:24:56 +0800 2018-12-14 19: ...

  5. Roslyn 如何使用 MSBuild Copy 复制文件

    本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本. 在 MSBuild 里可以使用很多命令,本文告诉大家如何 ...

  6. spring security (BCryptPasswordEncoder)加密及判断密码是否相同

    通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法. 加密: BCryptPasswordEncoder encode = ...

  7. H3C配置Header进入用户视图的提示信息--系统视图

                      incoming:登录终端用户界面时的提示信息. Header 3种类型     login:登录验证时的提示信息.    Vty模式                ...

  8. dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题

    在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题? 在 C# ...

  9. UVA live 6667 三维严格LIS

    UVA live 6667 三维严格LIS 传送门:https://vjudge.net/problem/UVALive-6667 题意: 每个球都有三个属性值x,y,z,要求最长的严格lis的长度和 ...

  10. c++修改系统环境变量 (修改注册表以后,立刻使用SendMessageTimeout(HWND_BROADCAST进行广播)

    #include "stdafx.h" #include "addPath.h" #define _AFXDLL #include <afxwin.h&g ...