目录
本文章是根据《深入理解Java虚拟机》一书,并参考网上其他文档进行的系统性的和简单容易理解的方式进行的整理。
借用书中的一句非常棒的话,给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。虽然工具只是处理数据的手段,但是合适的和先进的工具能节省问题的排查时间,所以个人建议能不用命令行工具则不用命令行工具。
一、JDK的命令行工具
1、jps工具:获取正在运行的JVM进程,功能简单但是使用频次高,用于寻找正确的JVM进程进行分析。参数列表参考:
CMD中执行结果如下:
2、jstat工具:监控虚拟机运行状态的工具,命令和参数较为复杂。不如图形界面看的比较快速。
3、jinfo工具:查看JVM的配置信息。
4、jmap工具:用于生成堆转储快照,生成一个堆信息文件。
5、jhat工具:与jmap搭配使用,但是需要将堆转储快照文件复制到本地进行分析而不是再服务器上进行分析,主要是因为堆数据分析是一个即耗时又十分占用硬件资源的工作。jhat在分析文件时会运行一个http服务器,通过浏览器的方式查看分析信息。如下图:
6、jstack工具:用于生成虚拟机当前时刻的线程快照(threaddump文件)。主要是用来定位线程长时间停顿的原因,如线程间的死锁、死循环、请求外部资源导致的长时间等待等常见原因。
执行效果如下图:
二、JDK的可视化工具
1、jconsole工具:基于JMX的可视化监控和管理工具。
①概览界面:主要是菜单栏包括内存、线程、类、VM概要、MBean的详细信息。
②内存监控页面:可以查看使用内存的大小、变化趋势。GC的频次和中断时间。可以手动执行GC。
③线程监控:可以查看线程状态,以及使线程处于当前状态的代码。可以检测死锁的线程。
④类加载监控:监控类的加载情况。
⑤VM概览:会显示垃圾回收器、GC统计信息、VM参数等的详细信息,以便获取VM信息。
2、VisualVM工具
多合一故障处理工具,VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。
VisualVM打开后,会发现功能比较单一,只有概述、监视、线程、抽样器、Profiler五个选项卡,只能对JVM进行内存和线程的基础监控和分析。需要手动安装其他监控的插件(但是参考网上的做法没有成功)。在高版本JDK(大于1.8或后期更新的1.8版本)中已经不会再自动集成VisualVM,如需VisualVM进行JVM性能分析则参考https://blog.csdn.net/qq_28509737/article/details/106541693地址进行安装。
①进行内存快照:对需要分析的内存空间进行内存快照。如下图所示:
②如果是离线的dump文件,则可以通过[装入]分析离线的文件。如下图所示:
③dump内容:概要中显示各分类的大小信息,然后看类的信息,最后通过类的信息查询实例的信息(PS:不能直接越过类的信息查询实例的信息)。