JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
监控GC的工具分为2种:命令行工具和图形工具;
常用的命令行工具有:
注:下面的命令都在JAVA_HOME/bin中,是java自带的命令。如果您发现无法使用,请直接进入Java安装目录调用或者先设置Java的环境变量,一个简单的办法为:直接运行命令 export PATH=$JAVA_HOME/bin:$PATH;
另外,一般的,在Linux下,下面的命令需要sudo权限,在windows下,部分命令的部分选项不能使用。
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
1、jps
jps主要用来输出JVM中运行的进程状态信息,可查看当前Java程序的jpid值
查询正在运行的JVM进程,常用的参数为:
-q:只输出LVMID,省略主类的名称
-m:输出虚拟机进程启动时传给主类main()函数的参数
-l:输出主类的全类名,如果进程执行的是Jar包,输出Jar路径
-v:输出虚拟机进程启动时JVM参数
命令格式:jps [option] [hostid]
一个简单的例子:
在上图中,有一个vid为309的apache进程在提供web服务。
图形化界面JConsole启动后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定
2、jstat
JVM统计监测工具
jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据(如果要显示远程JVM信息,需要远程主机开启RMI支持)。
如果在服务启动时没有指定启动参数-verbose:gc,则可以用jstat实时查看gc情况。
命令格式:jstat [option vmid [interval[s|ms] [count]]]
参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
-gcutil: 监视内容与-gc基本相同,不同的是这里显示的是已占用的百分比,如S0为86.53,代表着S0区已使用了86.53%
>jstat -gc 1532
>jstat -gc 1532 1000 5
>jstat -gcutil 1532 1000 5
jstat有如下选项:
-class:
监视类装载、卸载数量、总空间及类装载所耗费的时间
-gc:
监听Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量,以用空间、GC时间合计等信息
-gccapacity:
监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小空间
-gcutil:
监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause:
与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew:
监视新生代GC状况
-gcnewcapacity:
监视内同与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold:
监视老年代GC情况
-gcoldcapacity:
监视内同与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity:
输出永久代使用到最大和最小空间
-compiler:
输出JIT编译器编译过的方法、耗时等信息
-printcompilation:
输出已经被JIT编译的方法
一些术语的中文解释:
S0C:S0区容量(S1区相同,略)
S0U:S0区已使用
EC:E区容量
EU:E区已使用
OC:老年代容量
OU:老年代已使用
PC:Perm容量
PU:Perm区已使用
YGC:Young GC(Minor GC)次数
YGCT:Young GC总耗时
FGC:Full GC次数
FGCT:Full GC总耗时
GCT:GC总耗时
实例使用:
[root@localhost bin]# jstat -gcutil 25444
S0 S1 E O P YGC YGCT FGC FGCT GCT
11.63 0.00 56.46 66.92 98.49 162 0.248 6 0.331 0.579
实例使用2:(25444是java的进程号,ps -ef | grep java)
[root@localhost bin]# jstat -gcutil 25444 1000 5
S0 S1 E O P YGC YGCT FGC FGCT GCT
73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
ps -ef|grep jboss
jstat -gcutil $pid
S0 S1 E O P YGC YGCT FGC FGCT GCT
74.79 0.00 95.15 0.86 37.35 2 0.112 0 0.000 0.112
3、jstack
用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。
-F:当正常输出的请求不被响应时,强制输出线程堆栈
-l:除堆栈外,显示关于锁的附加信息
-m:如果调用到本地方法的话,可以显示C/C++的堆栈
命令格式:jstack [option] vmid
4、jmap
jmap用来查看堆内存使用状况,一般结合jhat使用。
用于显示当前Java堆和永久代的详细信息(如当前使用的收集器,当前的空间使用率等)
-dump:生成java堆转储快照
-heap:显示java堆详细信息(只在Linux/Solaris下有效)
-F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照(只在Linux/Solaris下有效)
-finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象(只在Linux/Solaris下有效)
-histo:显示堆中对象统计信息
-permstat:以ClassLoader为统计口径显示永久代内存状态(只在Linux/Solaris下有效)
命令格式:jmap [option] vmid
其中前面3个参数最重要,如:
查看对详细信息:jmap -heap 309
生成dump文件: jmap -dump:file=./test.prof 309
查看当前堆中对象统计信息: jmap -histo 309:
该命令显示3列,分别为对象数量,对象大小,对象名称,通过该命令可以查看是否内存中有大对象;
用jmap把进程内存使用情况dump到文件中,再用jhat分析查看
jmap进行dump命令格式如下:
jmap -dump:format=b,file=dumpFileName pid
我一样地对上面进程ID为21711进行Dump:
root@ubuntu:/# jmap -dump:format=b,file=/tmp/dump.dat 21711
Dumping heap to /tmp/dump.dat ...
Heap dump file created
5、jhat
用于分析使用jmap生成的dump文件,是JDK自带的工具,使用方法为: jhat -J -Xmx512m [file]
不过jhat没有mat好用,推荐使用mat(Eclipse插件: http://www.eclipse.org/mat ),mat速度更快,而且是图形界面。
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具
使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。
相关推荐
JVM 调优总结 JVM 调优是一个复杂的过程,需要从多个角度进行考虑。下面是对 JVM 调优的一些总结经验。 JVM 调优前的准备 在进行 JVM 调优之前,需要了解 JVM 的基本概念和原理,包括 JVM 的架构、垃圾回收机制、...
总结来说,JVM调优是提高Java应用性能的关键环节,涉及到对内存分配、垃圾回收策略、对象生命周期管理等多个层面的理解和实践。通过理论学习和实战演练,开发者可以更好地理解和优化JVM,从而提升应用程序的稳定性和...
本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...
JVM性能调优是Java开发者应该掌握的重要技能,以下是JVM性能调优的知识点总结: JVM基础知识 * 虚拟机:是一种软件,执行虚拟计算机指令,分为系统虚拟机和程序虚拟机。Java虚拟机是程序虚拟机,专门为执行单个...
### JAVA JVM性能调优监控工具详解 在Java开发过程中,特别是在企业级应用中,经常会遇到各种性能瓶颈问题,如内存溢出(`OutOfMemoryError`)、内存泄露、线程死锁、锁争用等问题。这些问题如果不能及时有效地解决...
《JVM工具、参数调优及调试技巧》 ...总结来说,熟练掌握JVM工具、参数调优和调试技巧,是每个Java开发者必备的能力。通过有效的监控、优化和问题解决,可以显著提升应用的稳定性和性能,为业务的高效运行保驾护航。
### JVM内存参数调优详解 #### 一、概述 Java虚拟机(JVM)是执行Java字节码的软件环境,为了提高Java程序的性能和稳定性,合理调整JVM的内存参数至关重要。根据Java启动参数的不同分类,我们可以将其分为标准参数...
这篇文章是对Hadoop、HBase、YARN以及MapReduce进行调优的综合总结,涵盖了自动部署、配置管理、监控管理和服务监控等多个方面。首先,我们来看看Hadoop调优的关键点。 在Hadoop调优中,主要涉及到的核心配置文件...
**JVM调优** 1. **内存配置**:根据应用需求合理设定堆内存大小,避免因内存溢出导致应用崩溃。 2. **GC策略选择**:根据应用特性选择合适的GC策略,例如,对响应时间敏感的应用可以选择低延迟的G1或ZGC。 3. **...
总结,掌握JVM工具的使用、合理调整JVM参数以及精通调试技巧是优化Java应用程序的关键。开发者应根据实际应用场景,灵活运用这些工具和方法,持续监控、分析和优化,以提高系统的稳定性和性能。
在进行JVM调优之前,先通过该命令查看当前的参数值,有助于避免重复设置已经默认开启的参数,同时也可以了解不同版本之间的差异。 2. **-XX:+AlwaysPreTouch** - 启动时预访问并置零所有分配的内存页面,虽然可能...
总结而言,深入理解JVM的类加载机制、内存结构、GC算法以及如何进行性能调优对于Java开发者来说是至关重要的。这不仅能够帮助开发者编写出性能更优的代码,还能有效地防止内存泄漏和性能瓶颈,从而提升整个应用的...
### JVM问题诊断常用命令详解 在Java开发与运维过程中,针对JVM(Java虚拟机)进行性能调优、故障排查是非常重要的环节。本文将详细介绍三种常用的JVM问题诊断工具:`jinfo`、`jmap` 和 `jstack` 的功能、用法以及...
3:JVM内存调优:JVM参数【标准参数、-X参数、-XX参数等】+常用命令【jps、jinfo、jstat、jstack、jmap】+常用工具【jconsole、jvisualvm、Arthas、MAT】+性能优化及总结+高并发场景分析+JVM性能优化指南。
可以通过`jmap –heap [PID]`命令来检查JVM的实际配置情况。 #### 总结 通过对Zookeeper的集群个数、JVM堆内存大小、事务日志和数据文件的管理、请求限速、并发连接数以及会话超时时间等方面的优化,可以显著提高...
JVM调优主要包括调整堆大小、新生代与老年代的比例、垃圾收集器的配置等,通过JDK提供的工具如JConsole、VisualVM等进行监控和优化。JVM参数设置可以通过启动命令行选项或者配置文件来完成,如-Xms、-Xmx控制堆内存...
- **性能调优**:JVM参数配置、监控工具使用。 #### 三、实战技巧篇 1. **类加载过程分析** - 了解类加载的三个阶段:加载、验证、准备。 - 探讨双亲委派模型的工作原理及其优缺点。 - 实现自定义类加载器的...
#### 二、JVM调优 在Mycat中,Java虚拟机(JVM)的调优主要包括两个方面:Java堆内存和直接内存映射(Direct Buffer占用)。合理的设置这些参数能够显著提高Mycat的运行效率。 **1. Java堆内存** - **定义**:...
在进行JVM调优时,需要考虑以下几点: 1. **年轻代大小选择** - 对于响应时间优先的应用,年轻代应该较小,以减少Full GC发生的频率。 - 对于吞吐量优先的应用,年轻代可以适当增大,利用更高效的垃圾回收机制。 ...