JVM深入学习笔记五:JVM 监控工具

简介: <p><strong>命令行工具</strong></p> <p>JDK提供了很多的工具来监控JVM。</p> <p>这些工具都是支持RMI远程监控的,暂且不记录远程调试的办法</p> <p>1. JPS</p> <p></p> <div>Process Status.  列出正在执行的虚拟机进程,可以查看到具体的类和进程ID。</div> <div><pre code_sn

命令行工具

JDK提供了很多的工具来监控JVM。

这些工具都是支持RMI远程监控的,暂且不记录远程调试的办法

1. JPS

Process Status.  列出正在执行的虚拟机进程,可以查看到具体的类和进程ID。
public class JPSTest {
	public static void main(String[] args) {
		while(true){}
	}
}
执行之。
使用windows命令查看进程:
C:\Users\huanggang>tasklist | findstr "java"
javaw.exe                     5600 Console                    1     13,020 K
使用jps查看
C:\Users\huanggang>jps -l
5600 com.prince.jvmtest.JPSTest
5596 sun.tools.jps.Jps

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

能够显示VM进程中的类装载、内存、GC、JIT编译等运行数据。 是命令行中的首选工具。

jstat -gc 4904 250 10
-gc 表示查看gc的工作情况,还有很多其他命令,大体上分为三类-class查看类加载情况-compiler查看JIT编译的情况等。

4904是用jps -l查看到的进程id

250是每隔多少ms查询一次

10是查询十次

3. jinfo Java配置信息工具

用于查看虚拟机的默认参数配置

运行时加入

-XX:+PrintFlagsFinal
可以查看所有的默认参数

C:\Users\huanggang>jinfo -flag InitialSurvivorRatio 6744
-XX:InitialSurvivorRatio=8
查看其中一个参数的值
另外还可以jinfo -flag key=value pid 这样的结构来修改一些运行期属性


4. jmap : Java内存映射工具

支持的功能有

-dump 生成Java堆转存储快照生成dump文件

-finalizerinfo 查看finalize执行排队情况,只有在linux上才能用

-heap 显示Java对详细信息,入使用哪种回收器等等。 只有在linux上才能用

生成dump文件

C:\Users\huanggang>jmap -dump:format=b,file=dump.dump 6744
Dumping heap to C:\Users\huanggang\dump.dump ...
Heap dump file created

5.jhat 堆转存储快照分析工具

配合jmap生成的文件

C:\Users\huanggang>jhat C:\Users\huanggang\dump.dump
Reading from C:\Users\huanggang\dump.dump...
Dump file created Thu Oct 09 13:27:20 CST 2014
Snapshot read, resolving...
Resolving 34438 objects...
Chasing references, expect 6 dots......
Eliminating duplicate references......

然后访问http://localhost:7000/来查看结果


一般不会用命令行来分析这个文件

6.  jstack Java堆栈跟踪工具

主要用来查看Java中每一个线程正在执行的方法堆栈的集合。 用来分析线程长时间停顿,比如死锁等原因。

Thread类中有一个getAllStackTraces()方法,能够完成大部分jstack的功能,可以考虑实现一个在线的堆栈查看工具。


可视化工具

1. Jconsole

很好的可视化工具,双击就可以运行,选择一个本地或者远程的进程就能够查看了。

不同的对应了不同的功能。

内存页签跟jstat功能类似,看下代码在Jconsole中的反应结果:



线程页类似于jstack


状态为:RUNNABLE, 还会有WAITING等等,来表示线程状态。

堆栈追踪:显示其被readBytes阻塞了


2. 还有收费的工具JProfile

3. VisualVM

jvisualvm.exe  也在安装目录下,功能很强大

可以在这个网站中下载插件,装了插件的VisualVM才是真的VVM:http://visualvm.java.net/plugins.html

前面介绍的所有命令行及JConsole的功能都包括了。

另外还可以右键的方式直接到处dump文件。

看下界面,很漂亮:



Profiles

能够收集一段时间内的内存或者CPU的性能数据,有点耗费资源,通常在程序开发的时候使用。

CPU会统计每个方法的执行耗时及次数

内存的话会分析每个方法关联对象数及每个对象所占用的空间。


另外一个有用的插件:BTrace动态日志跟踪技术。

感觉很有用,如果程序中出现问题,但是需要重新打印日志信息来观察方法参数和返回值等信息,就可以利用这个插件。  插件会提供一个界面输入一小段代码,然后在程序运行的时候同样会执行这样一小段代码,来达到动态日志的目的。


总结一下:JVM的监控和调优工作除了原理和工具外,还需要大量的经验才能够很好的完成,我本身的调优经验并不丰富。这里仅仅是提醒自己JVM提供了很多很好的工具,在注重性能的程序中可以尝试使用这些工具来使程序更加的完美。


相关文章
|
4月前
|
Arthas 监控 Java
(十一)JVM成神路之性能调优篇:GC调优、Arthas工具详解及各场景下线上最佳配置推荐
“在当前的互联网开发模式下,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代开发过程中炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题”。
450 3
|
1月前
|
JavaScript 前端开发 Java
jvm的jshell,学生的工具
本文介绍了JVM的jshell工具,它为Java平台添加了REPL(读取-评估-打印循环)功能,使得学习、探索编码和原型代码变得更加便捷,但作者认为其在实际开发中较为鸡肋。
33 1
jvm的jshell,学生的工具
|
1月前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
1月前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
51 2
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
45 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
3月前
|
缓存 监控 算法
吃透 JVM 诊断方法与工具使用
【8月更文挑战第4天】深入了解并掌握JVM诊断需把握几大要点:1) 熟悉JVM内存模型,如堆、栈及方法区;2) 掌握垃圾回收机制与算法;3) 运用工具如`jps`(查看Java进程)、`jstat`(监控运行状态)、`jmap`(生成堆快照)、`jhat`(分析堆快照)、`jstack`(检查线程栈); 4) 利用专业工具如Eclipse Memory Analyzer分析堆转储文件查找内存泄漏; 5) 动态监控与调整JVM参数; 6) 结合日志分析性能瓶颈。通过实战案例加深理解,有效应对JVM性能问题。
|
4月前
|
运维 监控 Java
(十)JVM成神路之线上故障排查、性能监控工具分析及各线上问题排错实战
经过前述九章的JVM知识学习后,咱们对于JVM的整体知识体系已经有了全面的认知。但前面的章节中,更多的是停留在理论上进行阐述,而本章节中则更多的会分析JVM的实战操作。
113 1
|
3月前
|
Arthas Prometheus 监控
使用JDK自带工具调优JVM的常用命令
使用JDK自带工具调优JVM的常用命令
|
4月前
|
监控 Java 开发者
Java面试题:如何使用JVM工具(如jconsole, jstack, jmap)来分析内存使用情况?
Java面试题:如何使用JVM工具(如jconsole, jstack, jmap)来分析内存使用情况?
207 2
|
3月前
|
监控 Java Android开发
吃透 JVM 诊断方法与工具使用
【8月更文挑战第3天】要精通JVM诊断,需掌握关键监控指标如内存(堆/非堆)、CPU使用及线程状态;熟悉工具如`jstat`(监控状态)、`jmap`(堆转储)、`jstack`(线程堆栈);并能利用Eclipse Memory Analyzer (MAT)分析堆转储找内存泄漏;同时理解GC日志以优化垃圾回收行为;通过实践案例加深理解。