《深入理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具
正文
一、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 虚拟机》读书笔记:虚拟机性能监控与故障处理工具的更多相关文章
- 深入理解Java虚拟机之读书笔记四 性能监控与故障处理工具
JDK的bin目录下存在很多有效的命令行工具,它们就是jdk\lib\toos.jar类库的封装. 一.jps:虚拟机进程状况工具,查询出LVMID. 二.jstat:虚拟机统计信息监视工具, 三.j ...
- 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...
- java虚拟机之性能监控与故障处理工具
sun jdk性能监控与故障处理工具 jps: 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id. jstat: 用于监视虚拟机各种运行状态信息的命令航工具.它可 ...
- JYM虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具 一.jps:虚拟机进程状况工具 常用指令 二.jstat:虚拟机统计信息监视工具 常用指令 三.jinfo:配置信息工具 四.jmap:Java内存映像工具 常用指令 五 ...
- 第八章 JVM性能监控与故障处理工具(2)
注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...
- jvm性能监控与故障处理工具
jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具 类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...
- 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具
上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...
- JVM(4) 虚拟机性能监控与故障处理工具
1. Sun JDK 监控和故障处理工具 1)jps:JVM process Status Tool,显示指定系统内所有的HotSpot虚拟机进程.可以列出正在运行的虚拟机进程,并显示虚拟机执行主类( ...
- 《深入理解Java虚拟机》笔记--第四章、虚拟机性能监控与故障处理工具
主要学习并记录在命令行中操作服务器时使用的六大命令工具,可视化工具JConsole和VisualVM在开发过程中熟悉. 一.jps:虚拟机进程状况工具(JVM Process Status Tool) ...
随机推荐
- 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 ...
- 符合阿里巴巴代码规范的checkstyle检测文件
一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...
- python基础十一之迭代器和生成器
可迭代 内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然. print(dir('')) # dir()函数可以获取当前数据类型的所有内置方法 返回值 ...
- 2018-12-14-恢复-U-盘隐藏文件夹
title author date CreateTime categories 恢复 U 盘隐藏文件夹 lindexi 2018-12-14 19:24:56 +0800 2018-12-14 19: ...
- Roslyn 如何使用 MSBuild Copy 复制文件
本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本. 在 MSBuild 里可以使用很多命令,本文告诉大家如何 ...
- spring security (BCryptPasswordEncoder)加密及判断密码是否相同
通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法. 加密: BCryptPasswordEncoder encode = ...
- H3C配置Header进入用户视图的提示信息--系统视图
incoming:登录终端用户界面时的提示信息. Header 3种类型 login:登录验证时的提示信息. Vty模式 ...
- dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题
在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题? 在 C# ...
- UVA live 6667 三维严格LIS
UVA live 6667 三维严格LIS 传送门:https://vjudge.net/problem/UVALive-6667 题意: 每个球都有三个属性值x,y,z,要求最长的严格lis的长度和 ...
- c++修改系统环境变量 (修改注册表以后,立刻使用SendMessageTimeout(HWND_BROADCAST进行广播)
#include "stdafx.h" #include "addPath.h" #define _AFXDLL #include <afxwin.h&g ...