`
uule
  • 浏览: 6358817 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

JVM调优命令总结

    博客分类:
  • JVM
 
阅读更多

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

 

监控GC的工具分为2种:命令行工具和图形工具

常用的命令行工具有:

注:下面的命令都在JAVA_HOME/bin中,是java自带的命令。如果您发现无法使用,请直接进入Java安装目录调用或者先设置Java的环境变量,一个简单的办法为:直接运行命令 export PATH=$JAVA_HOME/bin:$PATH;

另外,一般的,在Linux下,下面的命令需要sudo权限,在windows下,部分命令的部分选项不能使用。

 

Java系列笔记(4) - JVM监控与调优

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

Java虚拟机学习 - JDK可视化监控工具

 

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

jstack - 检测死锁、等待、CPU耗时

用于生成当前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速度更快,而且是图形界面。

 使用Eclipse MAT查找内存泄漏工具介绍

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具

使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

 

 

 

  • 大小: 3.7 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    对JVM调优的总结经验.docx

    JVM 调优总结 JVM 调优是一个复杂的过程,需要从多个角度进行考虑。下面是对 JVM 调优的一些总结经验。 JVM 调优前的准备 在进行 JVM 调优之前,需要了解 JVM 的基本概念和原理,包括 JVM 的架构、垃圾回收机制、...

    JVM调优实战.doc

    总结来说,JVM调优是提高Java应用性能的关键环节,涉及到对内存分配、垃圾回收策略、对象生命周期管理等多个层面的理解和实践。通过理论学习和实战演练,开发者可以更好地理解和优化JVM,从而提升应用程序的稳定性和...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...

    006-jvm性能调优

    JVM性能调优是Java开发者应该掌握的重要技能,以下是JVM性能调优的知识点总结: JVM基础知识 * 虚拟机:是一种软件,执行虚拟计算机指令,分为系统虚拟机和程序虚拟机。Java虚拟机是程序虚拟机,专门为执行单个...

    JAVA JVM性能调优监控工具详解

    ### JAVA JVM性能调优监控工具详解 在Java开发过程中,特别是在企业级应用中,经常会遇到各种性能瓶颈问题,如内存溢出(`OutOfMemoryError`)、内存泄露、线程死锁、锁争用等问题。这些问题如果不能及时有效地解决...

    jvm工具、参数调优&调试技巧

    《JVM工具、参数调优及调试技巧》 ...总结来说,熟练掌握JVM工具、参数调优和调试技巧,是每个Java开发者必备的能力。通过有效的监控、优化和问题解决,可以显著提升应用的稳定性和性能,为业务的高效运行保驾护航。

    jvm内存参数调优

    ### JVM内存参数调优详解 #### 一、概述 Java虚拟机(JVM)是执行Java字节码的软件环境,为了提高Java程序的性能和稳定性,合理调整JVM的内存参数至关重要。根据Java启动参数的不同分类,我们可以将其分为标准参数...

    hadoop、habse、yarn、MapReduce调优等总结的集合调优.docx

    这篇文章是对Hadoop、HBase、YARN以及MapReduce进行调优的综合总结,涵盖了自动部署、配置管理、监控管理和服务监控等多个方面。首先,我们来看看Hadoop调优的关键点。 在Hadoop调优中,主要涉及到的核心配置文件...

    JVM、GC详解及调优

    **JVM调优** 1. **内存配置**:根据应用需求合理设定堆内存大小,避免因内存溢出导致应用崩溃。 2. **GC策略选择**:根据应用特性选择合适的GC策略,例如,对响应时间敏感的应用可以选择低延迟的G1或ZGC。 3. **...

    jvm工具、参数调优&调试技巧(补充+修正版)

    总结,掌握JVM工具的使用、合理调整JVM参数以及精通调试技巧是优化Java应用程序的关键。开发者应根据实际应用场景,灵活运用这些工具和方法,持续监控、分析和优化,以提高系统的稳定性和性能。

    关键业务系统JVM参数推荐

    在进行JVM调优之前,先通过该命令查看当前的参数值,有助于避免重复设置已经默认开启的参数,同时也可以了解不同版本之间的差异。 2. **-XX:+AlwaysPreTouch** - 启动时预访问并置零所有分配的内存页面,虽然可能...

    jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC分析 命令调优)

    总结而言,深入理解JVM的类加载机制、内存结构、GC算法以及如何进行性能调优对于Java开发者来说是至关重要的。这不仅能够帮助开发者编写出性能更优的代码,还能有效地防止内存泄漏和性能瓶颈,从而提升整个应用的...

    JVM问题诊断常用命令

    ### JVM问题诊断常用命令详解 在Java开发与运维过程中,针对JVM(Java虚拟机)进行性能调优、故障排查是非常重要的环节。本文将详细介绍三种常用的JVM问题诊断工具:`jinfo`、`jmap` 和 `jstack` 的功能、用法以及...

    《JVM从入门到入魔》笔记.pdf

    3:JVM内存调优:JVM参数【标准参数、-X参数、-XX参数等】+常用命令【jps、jinfo、jstat、jstack、jmap】+常用工具【jconsole、jvisualvm、Arthas、MAT】+性能优化及总结+高并发场景分析+JVM性能优化指南。

    zookeeper调优

    可以通过`jmap –heap [PID]`命令来检查JVM的实际配置情况。 #### 总结 通过对Zookeeper的集群个数、JVM堆内存大小、事务日志和数据文件的管理、请求限速、并发连接数以及会话超时时间等方面的优化,可以显著提高...

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!)

    JVM调优主要包括调整堆大小、新生代与老年代的比例、垃圾收集器的配置等,通过JDK提供的工具如JConsole、VisualVM等进行监控和优化。JVM参数设置可以通过启动命令行选项或者配置文件来完成,如-Xms、-Xmx控制堆内存...

    从 0 开始带你成为JVM实战高手【完整版】

    - **性能调优**:JVM参数配置、监控工具使用。 #### 三、实战技巧篇 1. **类加载过程分析** - 了解类加载的三个阶段:加载、验证、准备。 - 探讨双亲委派模型的工作原理及其优缺点。 - 实现自定义类加载器的...

    Mycat性能调优指南1

    #### 二、JVM调优 在Mycat中,Java虚拟机(JVM)的调优主要包括两个方面:Java堆内存和直接内存映射(Direct Buffer占用)。合理的设置这些参数能够显著提高Mycat的运行效率。 **1. Java堆内存** - **定义**:...

    java虚拟机的相关参数设置与调优.pdf

    在进行JVM调优时,需要考虑以下几点: 1. **年轻代大小选择** - 对于响应时间优先的应用,年轻代应该较小,以减少Full GC发生的频率。 - 对于吞吐量优先的应用,年轻代可以适当增大,利用更高效的垃圾回收机制。 ...

Global site tag (gtag.js) - Google Analytics