说明:本篇文章是在阅读《深入理解Java虚拟机》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!
该项目的地址:https://github.com/xiaoheng1/jvm-read
1.JDK的命令行工具
我们常用的工具是 java.exe 和 javac.exe 这两个,但是不知道你们有没有注意到 bin 目录下的工具其实不止这两个. 例如 xjc.exe、
wsimport.exe、wsgen.exe 等. 这些工具非常的小巧,大部分都稳定在 27KB 左右,并非 JDK 开发团队为了炫耀编程水平,故意把它们制作的如此
精炼,而是因为这些命令行工具大多数是 jdk/lib/tools.jar 类库的一层薄包装而已,它们主要的实现代码在 tools 类库中已经实现了.
假如有人使用的是 linux 版的 JDK 的话,还会发现这些工具中很多甚至就是由 shell 脚本直接写成,可以使用 vim 直接打开它们.
JDK 开发团队选择采用 Java 代码来实现这些监控工具是有特别用意的:当应用程序部署到生产环境后,无论是直接接触物理服务器,还是 telnet 到
服务器都可能会收到限制. 借助 tools.jar 类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能.
tools.jar 包包含:
(1)asm
(2)attach
(3)hprof
(4)jar
(5)java
(6)jps
...
如果有使用 jdk1.5 的虚拟机,那么在程序启动的时候,需要添加参数 -Dcom.sum.management.jmxremote 开启 JM 管理功能,否则部分基于
JMX 的工具无法使用. jdk1.6+ 默认开启 JMX 管理功能.
(1)jps 虚拟机进程状况工具(java process status tool)
这个工具类似于 ps 命令,可以列出正在运行的虚拟机进程,并显示这些进程的本地虚拟机唯一 ID(和 PID 是一致的)以及其主类
jps [options] [hostid]
1508 Jps
665
1502 Launcher
734 RemoteMavenServer
1503 StringGC
(2)jstat 虚拟机统计信息监视工具(JVM Statistics Monitoring Tool)
用于监视虚拟机各种运行状态信息的命令工具,它可以显示本地或远程虚拟机中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI 图形
界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具(主要查询虚拟机的类装载、垃圾收集、运行期编译状态等).
jstat [option vmid [interval[s|ms][count]]]
interval 代表查询间隔
count 代表查询次数
如果省略这两个参数,则说明只查询一次. 如果需要每 250 毫秒查询一次,一共查询 20 次则如下:
jstat -gc 2764 250 20
如果是本地虚拟机进程,则 vmid 和 lvmid 是一致的,如果是远程虚拟机进程,那么 vmid 的格式应该是:
[protocol:][//]lvmid[@hostname[:port]/servername]
(3)jinfo Java配置信息工具(Configuration Info for java)
实时查看和调整虚拟机各项参数.
jinfo [option] pid
(4)jmap Java内存映像工具(Memory Map for Java)
用于生成堆转储快照(heapdump 或 dump 文件),如果不使用这种方式,那么还有一些比较粗暴的方式,例如:-XX:+HeapDumpOnOutOfMemoryError
参数,可以让虚拟机在 OOM 异常出现后自动生成 dump 文件,通过 -XX:+HeapDumpOnCtrlBreak 参数则可以使用 ctrl + break 键让虚拟机
生成 dump 文件,又或者在 linux 系统下,通过 kill 3 命令发送进程退出信号 "吓唬" 一下虚拟机,也能拿到 dump 文件.
jmap 除了拿到 dump 文件,还能查询 finalize 执行队列、Java 堆、永久代的详细信息,如空间使用率、当前用的是那种收集器等.
jmap [option] vmid
(5)jhat 阻尼及堆转储快照分析工具(JVM Heap Analysis Tool)
该命令和 jmap 大腿使用,用来分析 jmap 生成的堆转储快照. jhat 内置了一个微型的 http/html 服务器,生成 dump 文件的分析结果后,可以
在浏览器中查看.
需要说明的是,jhat 功能比较简陋,不到万不得已,还是选择其他更好用的工具吧.
(6)jstack Java堆栈跟踪工具(Stack Trace for Java)
用于生成虚拟机当前时刻的线程快照(threaddump 或 javacore 文件). 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成
线程快照的目的在于定位线程出现上时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等.
jstack [option] vmid
在 jdk1.5 中 java.lang.Thread 类新增了一个 getAllStackTraces() 方法用于获取虚拟机中所有线程的 StackTraceElement 对象. 使用
这个方法可以完成 jstack 的大部分功能.
(7)HSDIS JIT生成代码反汇编
待定
2.JDK的可视化工具
JConsole 和 VisualVM
(1)JConsole Java监视与管理控制台(Java Monitoring and Management Console)
是基于 JMX 的可视化监视、管理工具. 它管理部分的功能是针对 JMX MBean 进行管理,由于 MBean 可以使用代码、中间件服务器的管理控制台
或者所有符合 JMX 规范的软件进行访问,所以我们重点看下 Console 的监视部分功能.
(2)启动 JConsole
通过 jdk/bin.jconsole.exe 启动 JConsole 后,将自动搜索出本机运行的所有虚拟机进程,不需要执行 jps 来查询.
进去后,我们可以看到 概述、内存、线程、类、VM摘要 MBean 这6个页签.
概述 页签显示的是整个虚拟机主要的运行数据的概览,其中包括堆内存使用情况、线程、类、CPU使用情况 4 种信息的曲线图,这些曲线图是后面内存、
线程、类 页签的信息汇总.
内存监控 -> 相当于可视化的 jstat 命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势.
线程监控相当于可视化的 jstack 命令,遇到线程停顿时可以使用这个页签进行监控分析. 前面提到过线程过程时间停顿的主要原因有:等待外部资源
(数据库连接、网络连接、设备资源等)、死循环、锁等待(活锁或死锁).
VisualVM 多合一故障处理工具
VisualVM(All in One) 是到目前为止随 JDK 发布的功能最强大的运行监视和故障处理程序.
VisualVM 基于 NetBeans 平台开发,因此它一开始就具备了插件扩展功能的特性,通过插件扩展支持,VisualVM 可以做到:
1.显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
2.监视应用程序的 CPU、GC、堆、方法区以及线程的信息(jstat、jstack)
3.dump 以及分析堆转储快照(jmap、jhat)
4.方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法.
5.离线程序快照:收集程序的运行时配置、线程 dump、内存 dump 等信息建立一个快照,可以将快照发送开发者进行 Bug 反馈.
6.其他 plugins 的无限可能.
分享到:
相关推荐
第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~~10章介绍了虚拟机的核心——Class文件结构,以及虚拟机中类的装载...
本篇文章将详细介绍Java开发工具包(JDK)中的一些重要监控和故障处理工具,这些工具可以帮助开发者识别和解决生产环境中的内存溢出问题,进而提升应用程序的性能和稳定性。 首先,我们来了解JDK提供的几个监控和...
第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~10章介绍了虚拟机的核心——Class文件结构,以及虚拟机中类的装载系统...
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 ...
概述 Java内存区域 GC与内存分配策略 虚拟机性能监控与故障处理工具 类文件结构 类加载机制 字节码执行引擎
第11章:虚拟机性能监控与故障处理工具(未列出) 本章介绍了用于分析和调试JVM的工具,如jconsole、jvisualvm等,以及如何通过这些工具监控和诊断JVM的运行状态,定位和解决问题。 第13章:Java内存模型与线程 这...
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
- 第4章 虚拟机性能监控、故障处理工具- 4.2 基础故障处理工具JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来
4. **性能监控与调优工具**:JDK自带的一些工具,如jconsole、jvisualvm、jmap、jstack等,是JVM性能分析的重要辅助。书中可能详细讲解了这些工具的使用方法和分析技巧。 5. **JVM参数设置**:了解并合理设置JVM...
此外,还介绍了JVM参数调优、Java对象模型、即时编译器、类加载机制、以及虚拟机性能监控与故障处理工具。 在Java基础知识方面,涵盖了阅读源代码的能力,包括String、Integer等基本类型的源码分析;了解Java中各种...
书中介绍了使用JDK自带的工具,如jconsole、jvisualvm、jmap、jhat等进行性能监控和问题排查的方法。读者将学习如何分析堆内存、GC日志,以及如何利用线程Dump来定位死锁和线程阻塞等问题。 书中还涉及了JVM的编译...
例如,合理设置堆大小、新生代与老年代的比例,选择合适的GC策略,避免死锁和竞态条件,以及利用JDK工具(如JVisualVM、JProfiler等)进行性能监控和分析。 5. **故障诊断**:当遇到JVM异常或性能问题时,我们需要...
《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的专著,旨在帮助开发者解决实际工作中遇到的JVM相关问题,提升系统的性能表现。通过对JVM内部机制的深入理解,我们可以更有效地调试、...