JVM调优工具

JMap

首先要知道Java进程的pid。

Windows:

..

..

..

Linux:

ps -ef | grep java

查看堆栈信息(jmap -heap pid)

jmap -heap 8512
Attaching to process ID 8512, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.161-b12

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2128609280 (2030.0MB)
   NewSize                  = 44564480 (42.5MB)
   MaxNewSize               = 709361664 (676.5MB)
   OldSize                  = 89653248 (85.5MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 68157440 (65.0MB)
   used     = 57053032 (54.410011291503906MB)
   free     = 11104408 (10.589988708496094MB)
   83.70770967923679% used
From Space:
   capacity = 5242880 (5.0MB)
   used     = 3113008 (2.9687957763671875MB)
   free     = 2129872 (2.0312042236328125MB)
   59.37591552734375% used
To Space:
   capacity = 3670016 (3.5MB)
   used     = 0 (0.0MB)
   free     = 3670016 (3.5MB)
   0.0% used
PS Old Generation
   capacity = 89653248 (85.5MB)
   used     = 49152 (0.046875MB)
   free     = 89604096 (85.453125MB)
   0.05482456140350877% used

3998 interned Strings occupying 342784 bytes.

打印等待回收的对象信息(jmap -finalizerinfo pid)

jmap -finalizerinfo 8512
Attaching to process ID 8512, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.161-b12
Number of objects pending for finalization: 0

打印堆里面对象的统计信息:对象数量、占用大小、类名(jmap -histo:live pid | more)

jmap -histo:live 8512 | more

 num     #instances         #bytes  class name
----------------------------------------------
   1:          9728        1016408  [C
   2:          1650         303784  [B
   3:          9441         226584  java.lang.String
   4:          1821         205672  java.lang.Class
   5:          1285          92520  org.apache.zookeeper.data.StatPersisted
   6:          1735          87008  [Ljava.lang.Object;
   7:          2385          76320  java.util.HashMap$Node
   8:          2322          74304  java.util.concurrent.ConcurrentHashMap$Node
   9:          1199          57552  java.util.HashMap
  10:           783          54312  [I
  11:           658          45208  [Ljava.util.HashMap$Node;
  12:          1285          41120  org.apache.zookeeper.server.DataNode
  13:           437          38456  java.lang.reflect.Method
  14:           502          36144  org.apache.zookeeper.server.Request
  15:           882          35280  java.util.TreeMap$Entry
  16:           501          24048  org.apache.zookeeper.txn.TxnHeader
  17:           889          21336  java.util.LinkedList$Node
  18:           582          21296  [Ljava.lang.String;
  19:          1049          16784  java.util.HashSet
  20:           501          16032  org.apache.zookeeper.server.quorum.QuorumPacket
  21:           399          15960  java.lang.ref.SoftReference
  22:            31          15952  [Ljava.util.concurrent.ConcurrentHashMap$Node;

打印类加载器统计信息(jmap -clstats pid)

jmap -clstats  8512
Attaching to process ID 8512, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.161-b12
finding class loader instances ..done.
computing per loader stat ..done.
please wait.. computing liveness....................................liveness analysis may be inaccurate ...
class_loader    classes    bytes    parent_loader    alive?    type

<bootstrap>    1359    2420845      null      live    <internal>
0x000000008128cef8    1    1474      null      dead    sun/reflect/[email protected]0x0000000017289df8
0x000000008128d088    1    880      null      dead    sun/reflect/[email protected]0x0000000017289df8
0x000000008128d218    1    880      null      dead    sun/reflect/[email protected]0x0000000017289df8
0x00000000814621d0    0    0    0x000000008120b6c8    dead    java/util/[email protected]0x0000000017303798
0x000000008120b6c8    358    716069    0x000000008120b728    live    sun/misc/[email protected]0x000000001728f6a0
0x000000008120b728    3    2574      null      live    sun/misc/[email protected]0x000000001728fa48
0x000000008128cfc0    1    880      null      dead    sun/reflect/[email protected]0x0000000017289df8
0x000000008128d150    1    880      null      dead    sun/reflect/[email protected]0x0000000017289df8

total = 9    1725    3144482        N/A        alive=3, dead=6        N/A    

把堆信息生成一个文件(jmap -dump:live,format=b,file=heap.bin <pid>)

[d:\]$ jmap -dump:live,format=b,file=heap.bin 8512
Dumping heap to D:\heap.bin ...
Heap dump file created

之后,我们利用Mat来分析,下载 Eclipse Memory Analyzer

..

下载完解压

...

..

..

..打开我们刚才生成的文件

..

..看效果

..

JStat

每隔一段时间输出GC情况(jstat -gcutil pid inteval)

[d:\]$ jstat -gcutil 8512 3000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082
  0.00   0.00   0.94   7.26  96.88  93.14      7    0.061     2    0.022    0.082

参数:

S0        from区已使用容量的百分比
S1        to区已使用容量的百分比
E         伊甸区已使用容量的百分比
O         老年代已使用容量的百分比
M         元数据空间利用率
CCS       压缩类空间利用率
YGC       从应用程序启动到采样时年轻代中gc次数
YGCT      从应用程序启动到采样时年轻代中gc所用时间(s)
FGC       从应用程序启动到采样时old代(全gc)gc次数
FGCT      从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT       从应用程序启动到采样时gc用的总时间(s)

还有另外一个方法,输出的要全面一些

[d:\]$ jstat -gc 8512 3000
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
4096.0 3584.0  0.0    0.0   133120.0  1257.0   37376.0     2715.3   9600.0 9300.8 1152.0 1073.0      7    0.061   2      0.022    0.082
4096.0 3584.0  0.0    0.0   133120.0  1257.0   37376.0     2715.3   9600.0 9300.8 1152.0 1073.0      7    0.061   2      0.022    0.082
4096.0 3584.0  0.0    0.0   133120.0  1257.0   37376.0     2715.3   9600.0 9300.8 1152.0 1073.0      7    0.061   2      0.022    0.082
4096.0 3584.0  0.0    0.0   133120.0  1257.0   37376.0     2715.3   9600.0 9300.8 1152.0 1073.0      7    0.061   2      0.022    0.082

S0C: Current survivor space 0 capacity (kB).
S1C: Current survivor space 1 capacity (kB).
S0U: Survivor space 0 utilization (kB).
S1U: Survivor space 1 utilization (kB).
EC: Current eden space capacity (kB).
EU: Eden space utilization (kB).
OC: Current old space capacity (kB).
OU: Old space utilization (kB).
MC: Metaspace capacity (kB).
MU: Metacspace utilization (kB).
CCSC: Compressed class space capacity (kB).
CCSU: Compressed class space used (kB).
YGC: Number of young generation garbage collection events.
YGCT: Young generation garbage collection time.
FGC: Number of full GC events.
FGCT: Full garbage collection time.
GCT: Total garbage collection time.

参考:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jstat.html

原文地址:https://www.cnblogs.com/LUA123/p/9995974.html

时间: 2024-10-09 08:17:54

JVM调优工具的相关文章

JVM调优-工具篇

原文地址 16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来. jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin

《深入理解Java虚拟机》(五)JVM调优 - 工具

JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监控主要体现在:堆栈内存.线程.CPU.类.VM信息这几个方面,而管理主要是对JMX MBean(managed beans,被管理的beans,是一系列资源,包含对象.接口.设备等)的管理,不仅能查看bean的属性和方法信息,还能够在运行时修改属性或调用方法. 直接在jdk/bin目录下点击jcon

JVM调优工具的使用(jps,jstat,jstack,jmap,jhat)

JDK本身提供了很丰富的性能监控工具,除了集成式的visualVM和jConsole外,还有jstat,jstack,jps,jmap,jhat小工具,这些都是性能调优的常用工具 我们在Java的开发中,常常会遇到下面这些问题: 1内存不足,2内存泄漏,3锁争用,4线程锁死,5java进程消耗CPU过高等 这些问题出现的时候 大家常常通过重启服务器或者调大内存来临时解决 一,jps命令 jps主要用来输出JVM中运行的进程状态信息 命令行参数选项: -q 不输出类名.Jar名和传入main方法的

JVM 性能调优工具

jdk自带的工具,在macOs系统中的目录位置(jdk具体版本位置要替换):/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin 参考:Mac 上 java 究竟在哪里,本文彻底让你搞清楚! 相关文章 网址 Jvm 系列(七):Jvm 调优-工具篇 http://www.ityouknow.com/jvm/2017/09/22/jvm-tool.html 原文地址:https://www.cnblogs.com/

JVM 调优参数详解

GC有两种类型:Scavenge GC 和Full GC 1.Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor的两个区中. 2.Full GC 对整个堆进行整理,包括Young.Tenured和Perm.Full GC 比Scavenge GC要慢,因此应该尽可能减少Full GC,有如下原因可能导致Full GC a.Tenured被写满: b.P

JVM调优总结-调优方法

转:http://pengjiaheng.javaeye.com/blog/552456 JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 JProfiler:商业软件,需要付费.功能强大.详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似.推荐. 如何调优 观察内存释放情况.集合类检查.对象树 上面这些调优工具都提

JVM调优知识

一.Java应用服务器 Tomcat.Nginx.Resin.等多种应用服务器,虽然JVM做为容器,提供的是一个Java Web的运行时环境,以支持Servlet/JSP等等这些内容的运行但是我们都很清楚,其本质上是还是一个Java应用程序.现在有哪些java应用服务器呢?商业的有BEA Weblogic Server.IBM Websphere Application Server.Oracle Application Server.Sybase EAServer.免费开源的java应用服务器

JVM调优[转]

JVM调优总结-序 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看,又添加了一些东西.突然发现,基础真的很重要.学习的过程是一个由表及里,再由里及表的过程.呵呵,所谓的"温故而知新".而真正能走完这个轮回的人,也就能称为大牛或专家了.这个过程可能来来回回,这就是所谓"螺旋上升",而每一次轮回都有新的发现. 这回添加的东西主要集中在基础的一些问题上,还有一些这两年思考的问题.这些问题可能平时我们不会刻意去想,但是真正看清楚了,却发现还是大有裨益的:)希望对大

java虚拟机学习-JVM调优总结-调优方法(12)

JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 JProfiler:商业软件,需要付费.功能强大.详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似.推荐. 如何调优 观察内存释放情况.集合类检查.对象树 上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能 堆信息查看 可查看堆空间大小分配(年轻代