jvm优化命令、工具案例

jps查询出所有的java运行程序

C:\Users>jps
14624 Jps
17600 GgUserApplication
20752 RemoteMavenServer
10616
8652 Launcher

查询java运行的初始值:jinfo -flags 17600

java系统参数:jinfo -sysprops 17600

jstat
类加载统计:

jstat -class 17600

C:\Users>jstat -class 17600
Loaded  Bytes  Unloaded  Bytes     Time
 11313 20765.3        6     9.4      12.17

Loaded:加载class的数量

Bytes:所占用空间大小

Unloaded:未加载数量

Bytes:未加载占用空间

Time:时间

统计垃圾回收

jstat -gc 17600

C:\Users>jstat -gc 17600
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
22528.0 23040.0  0.0    0.0   492544.0 52825.3   215552.0   49778.0   59096.0 56602.6 7936.0 7511.8     11    0.150   3      0.366    0.516

S0C:第一个幸存区的大小

S1C:第二个幸存区的大小

S0U:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法区大小(元空间)

MU:方法区使用大小

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

堆内存统计

jstat -gccapacity 17600

C:\Users>jstat -gccapacity 17600
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 87040.0 1394688.0 692736.0 22528.0 23040.0 492544.0   175104.0  2789376.0   215552.0   215552.0      0.0 1099776.0  59096.0      0.0 1048576.0   7936.0     11     3

NGCMN:新生代最小容量

NGCMX:新生代最大容量

NGC:当前新生代容量

S0C:第一个幸存区大小

S1C:第二个幸存区的大小

EC:伊甸园区的大小

OGCMN:老年代最小容量

OGCMX:老年代最大容量

OGC:当前老年代大小

OC:当前老年代大小

MCMN:最小元数据容量

MCMX:最大元数据容量

MC:当前元数据空间大小

CCSMN:最小压缩类空间大小

CCSMX:最大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:年轻代gc次数

FGC:老年代GC次数

新生代垃圾回收统计

jstat -gcnew 17600

C:\Users>jstat -gcnew 17600
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
22528.0 23040.0    0.0    0.0  1  15 22528.0 492544.0  52825.3     11    0.150

S0C:第一个幸存区的大小

S1C:第二个幸存区的大小

S0U:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

TT:对象在新生代存活的次数

MTT:对象在新生代存活的最大次数

DSS:期望的幸存区大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

新生代内存统计

jstat -gcnewcapacity 17600

C:\Users>jstat -gcnewcapacity 17600
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
   87040.0  1394688.0   692736.0 464896.0  22528.0 464896.0  23040.0  1393664.0   492544.0    11     3

NGCMN:新生代最小容量

NGCMX:新生代最大容量

NGC:当前新生代容量

S0CMX:最大幸存1区大小

S0C:当前幸存1区大小

S1CMX:最大幸存2区大小

S1C:当前幸存2区大小

ECMX:最大伊甸园区大小

EC:当前伊甸园区大小

YGC:年轻代垃圾回收次数

FGC:老年代回收次数

老年代垃圾回收统计

jstat -gcold 17600

   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
 59096.0  56602.6   7936.0   7511.8    215552.0     49778.0     11     3    0.366    0.516

MC:方法区大小

MU:方法区使用大小

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

OC:老年代大小

OU:老年代使用大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

老年代内存统计

jstat -gcoldcapacity 17600


C:\Users>jstat -gcoldcapacity 17600
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
   175104.0   2789376.0    215552.0    215552.0    11     3    0.366    0.516

OGCMN:老年代最小容量

OGCMX:老年代最大容量

OGC:当前老年代大小

OC:老年代大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

元数据空间统计

jstat -gcmetacapacity 17600

C:\Users>jstat -gcmetacapacity 17600
   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT
       0.0  1099776.0    59096.0        0.0  1048576.0     7936.0    11     3    0.366    0.516

MCMN:最小元数据容量

MCMX:最大元数据容量

MC:当前元数据空间大小

CCSMN:最小压缩类空间大小

CCSMX:最大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

jstat -gcutil 17600

C:\Users\yangxinlei>jstat -gcutil 17600
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  10.81  23.09  95.78  94.65     11    0.150     3    0.366    0.516

S0:幸存1区当前使用比例

S1:幸存2区当前使用比例

E:伊甸园区使用比例

O:老年代使用比例

M:元数据区使用比例

CCS:压缩使用比例

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

jmap查看内容信息

查看某个进程的内存占用大小

jmap -histo 17600 > ./log.txt

文件内容

num     #instances         #bytes  class name
----------------------------------------------
   1:          5623       47525656  [I
   2:        126740       19063304  [C
   3:         25990        7878072  [B
   4:         40695        3581160  java.lang.reflect.Method
   5:        110797        2659128  java.lang.String
   6:         51806        1657792  java.util.concurrent.ConcurrentHashMap$Node
   7:         12129        1349520  java.lang.Class
   8:         22399        1125168  [Ljava.lang.Object;
   9:         15912        1096160  [Ljava.util.HashMap$Node;
  10:         33217        1062944  java.util.HashMap$Node
  11:         31694        1014208  java.lang.ref.WeakReference
  12:         24426         977040  java.util.LinkedHashMap$Entry
  13:         15264         732672  org.aspectj.weaver.reflect.ShadowMatchImpl
  14:         12794         716464  java.util.LinkedHashMap
  15:         31910         711512  [Ljava.lang.Class;
  16:          7152         514944  java.lang.reflect.Field
  17:         19271         492992  [Ljava.lang.String;
  18:         12247         489880  java.lang.ref.SoftReference
  19:         15264         488448  org.aspectj.weaver.patterns.ExposedState
  20:           462         466384  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  21:         17546         421104  java.util.ArrayList
  22:          8773         421104  java.util.HashMap
  23:          6960         389760  java.beans.MethodDescriptor
  24:         13900         333600  java.beans.MethodRef
  25:         20000         320000  java.lang.Object
  26:          5424         260352  org.springframework.core.ResolvableType
  27:          6464         258560  org.springframework.util.ConcurrentReferenceHashMap$Segment
  28:          7534         241088  java.util.concurrent.locks.ReentrantLock$NonfairSync
  29:          3004         240320  java.lang.reflect.Constructor
  30:          5922         236880  java.util.WeakHashMap$Entry
  31:          7240         231680  java.lang.ref.ReferenceQueue
  32:          3384         221488  [Ljava.lang.reflect.Method;
  33:          6185         197920  java.util.Hashtable$Entry
  34:          6608         187456  [Lorg.springframework.util.ConcurrentReferenceHashMap$Reference;
  35:          1694         162624  org.springframework.beans.GenericTypeAwarePropertyDescriptor
  36:          6464         155136  org.springframework.util.ConcurrentReferenceHashMap$ReferenceManager
  37:          4576         146432  java.util.ArrayList$Itr
  38:          2604         145824  java.lang.Class$ReflectionData
  39:          1894         136368  org.springframework.core.annotation.AnnotationAttributes
  40:          5466         131184  org.springframework.core.MethodClassKey
  41:          5446         130704  java.util.jar.Attributes$Name
  42:          5362         121544  [Ljava.lang.reflect.Type;
  43:          2941         117640  java.lang.ref.Finalizer
  44:          1613         116136  java.beans.PropertyDescriptor
  45:          7243         115888  java.lang.ref.ReferenceQueue$Lock
  46:          1788         114432  org.springframework.core.MethodParameter
  47:          2741         109640  java.util.TreeMap$Entry
  48:          2200         105600  org.springframework.util.ConcurrentReferenceHashMap$SoftEntryReference
  49:          2554         102160  java.util.HashMap$KeyIterator
  50:          4172         100128  sun.reflect.generics.tree.SimpleClassTypeSignature
  51:          4156          99744  java.util.LinkedList$Node
  52:          1493          95552  java.net.URL
  53:          2836          90752  java.util.LinkedList
  54:          1253          85384  [S
  55:          1260          80640  com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
  56:           570          79680  [Ljava.util.WeakHashMap$Entry;
  57:          4172          78456  [Lsun.reflect.generics.tree.TypeArgument;
  58:           401          77296  [Ljava.util.Hashtable$Entry;
  59:          1265          70840  java.util.concurrent.ConcurrentHashMap$KeyIterator
  60:          4343          69488  java.util.LinkedHashSet
  61:          2854          68496  sun.reflect.annotation.AnnotationInvocationHandler
  62:          1159          64904  java.lang.invoke.MemberName
  63:          3911          62576  sun.reflect.generics.tree.ClassTypeSignature
  64:          3797          60752  java.util.jar.Attributes
  65:          2518          60432  java.util.Collections$UnmodifiableCollection$1
  66:          3738          59808  java.util.HashMap$EntrySet
  67:           982          54992  java.util.zip.ZipFile$ZipFileInputStream
  68:           977          54712  java.util.zip.ZipFile$ZipFileInflaterInputStream
  69:           946          52976  java.lang.Package
  70:           314          52752  org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition
  71:          2156          51744  org.springframework.util.ConcurrentReferenceHashMap$Entry
  72:          3078          49248  java.util.LinkedHashMap$LinkedKeySet
  73:           767          49088  java.util.concurrent.ConcurrentHashMap
  74:          2974          47584  org.springframework.core.annotation.AnnotationUtils$DefaultValueHolder
  75:          1188          46264  [Z
  76:          2875          46000  org.springframework.core.ResolvableType$DefaultVariableResolver
  77:          1606          44192  [Ljava.lang.CharSequence;
  78:          1092          43680  java.lang.invoke.MethodType
  79:           273          43680  org.springframework.beans.factory.support.RootBeanDefinition
  80:           907          43536  org.apache.tomcat.util.modeler.AttributeInfo

num:序号

instances:实例数量

bytes:占用空间大小

class name:类名称

堆信息

jmap -heap 17600
Attaching to process ID 17600, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13

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

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 4284481536 (4086.0MB)
   NewSize                  = 89128960 (85.0MB)
   MaxNewSize               = 1428160512 (1362.0MB)
   OldSize                  = 179306496 (171.0MB)
   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 = 504365056 (481.0MB)
   used     = 54519344 (51.99369812011719MB)
   free     = 449845712 (429.0063018798828MB)
   10.809500648673012% used
From Space:
   capacity = 23592960 (22.5MB)
   used     = 0 (0.0MB)
   free     = 23592960 (22.5MB)
   0.0% used
To Space:
   capacity = 23068672 (22.0MB)
   used     = 0 (0.0MB)
   free     = 23068672 (22.0MB)
   0.0% used
PS Old Generation
   capacity = 220725248 (210.5MB)
   used     = 50972656 (48.61131286621094MB)
   free     = 169752592 (161.88868713378906MB)
   23.09326026898382% used

28892 interned Strings occupying 3416424 bytes.

堆内存dump

jmap -dump:format=b,file=eureka.hprof 17600

也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)

1.	-XX:+HeapDumpOnOutOfMemoryError
2.	-XX:HeapDumpPath=./   (路径)

可以用jvisualvm 命令工具导入该dump文件分析

jstack

jstack是用来查看线程死锁的,但是也是可以jvisualvm查看锁死

package demo05;

public class DeadLockTest {
    private static Object locak1 = new Object();
    private static Object locak2 = new Object();

    public static void main(String[] args) {
        new Thread(()->{
            synchronized(locak1){
                try {
                    System.out.println("thread1 begin");
                    Thread.sleep(5000);
                }catch (Exception e){

                }
                synchronized ((locak2)){
                    System.out.println("thread1 end");
                }
            }
        }).start();

        new Thread(()->{
            synchronized(locak2){
                try {
                    System.out.println("thread2 begin");
                    Thread.sleep(5000);
                }catch (Exception e){

                }
                synchronized ((locak1)){
                    System.out.println("thread2 end");
                }
            }
        }).start();

        System.out.println("mian thread end");
    }
}

远程连接jvisualvm

启动普通的jar程序JMX端口配置:

java -Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -jar foo.jar

tomcat的JMX配置

JAVA_OPTS=-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

jvisualvm远程连接服务需要在远程服务器上配置host(连接ip 主机名),并且要关闭防火墙

jstack找出占用cpu最高的堆栈信息

1、使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如4977

2、按H,获取每个线程的内存情况

3、找到内存和cpu占用最高的线程tid,比如4977

4、转为十六进制得到 0x1371 ,此为线程id的十六进制表示

5、执行 jstack 4977|grep -A 10 1371,得到线程堆栈信息中1371这个线程所在行的后面10行

6、查看对应的堆栈信息找出可能存在问题的代码

自己总结完整java知识地址访问:https://www.yuque.com/yangxinlei/lodfss

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值