JVM常用指令

简介: JVM常用指令

Jmap

查询堆信息 :jmap -heap pid

C:\Users\41732>jmap -heap 9780
Attaching to process ID 9780, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 4267704320 (4070.0M
   NewSize                  = 89128960 (85.0MB)
   MaxNewSize               = 1422393344 (1356.5M
   OldSize                  = 179306496 (171.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875
   CompressedClassSpaceSize = 1073741824 (1024.0M
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
   capacity = 65536000 (62.5MB)
   used     = 36124952 (34.451438903808594MB)
   free     = 29411048 (28.048561096191406MB)
   55.12230224609375% used
From Space:
   capacity = 14680064 (14.0MB)
   used     = 4598376 (4.385353088378906MB)
   free     = 10081688 (9.614646911621094MB)
   31.323950631277903% used
To Space:
   capacity = 14680064 (14.0MB)
   used     = 0 (0.0MB)
   free     = 14680064 (14.0MB)
   0.0% used
PS Old Generation
   capacity = 110100480 (105.0MB)
   used     = 13078136 (12.472282409667969MB)
   free     = 97022344 (92.52771759033203MB)
   11.87836419968378% used
15044 interned Strings occupying 2001648 bytes.

查看当前实例个数:jmap -histo pid

num     #instances         #bytes  class name
----------------------------------------------
   1:        123030       17393624  [C
   2:         42214       13424608  [B
   3:         10861        4126040  [I
   4:         23535        2071080  java.lang.reflect.Method
   5:         70927        1702248  java.lang.String
   6:         22263        1075592  [Ljava.lang.Object;
   7:         37505         779912  [Ljava.lang.Class;
   8:          7161         629160  [Ljava.util.HashMap$Node;
   9:         12558         602784  java.util.HashMap
  10:          5286         592496  java.lang.Class
  11:         16836         538752  java.util.HashMap$Node
  12:          9808         470784  org.springframework.core.ResolvableType
  13:         12865         411680  java.util.ArrayList$Itr
  14:         11799         377568  java.util.concurrent.ConcurrentHashMap$Node
  15:          9108         364320  java.util.LinkedHashMap$Entry
  16:          7767         310680  java.util.HashMap$KeyIterator
  17:         11649         279576  java.lang.StringBuilder
  18:          3441         271808  [S
  19:          4577         256312  java.util.LinkedHashMap
  20:          7391         236512  java.lang.ref.WeakReference
  21:          3863         223792  [Ljava.lang.reflect.Method;
  22:          2952         212544  java.lang.reflect.Field
  23:          5122         195728  [Ljava.lang.String;
  24:          7907         189768  java.util.ArrayList
  25:          1868         189736  [Z
  26:          7011         168264  java.util.Collections$UnmodifiableCollection$1
  27:           144         156784  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  28:          3869         154760  java.lang.ref.SoftReference
  • num:序号
  • instances:实例数量
  • bytes:占用空间大小
  • class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]

查看总大小排名前30的对象,3是按第三列排序

jmap -histo  92406 | sort -n -r -k 3 | head -30

查看与某某相关的对象

jmap -histo  92406 |grep xxx

导出内存影像:jmap dump:format=b,file=fileName pid

C:\Users\41732>jmap -dump:format=b,file=eureka.hprof 9780
Dumping heap to C:\Users\41732\eureka.hprof ...
Heap dump file created
C:\Users\41732>

Jinfo

查看jvm参数

C:\Users\41732>jinfo -flags 9780
Attaching to process ID 9780, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4267704320 -XX:MaxNewSize=1422393344 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=891289
60 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50964,suspend=y,server=n -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -javaagent:C:\Users\41732\AppData\Local\JetBrains\IntelliJIdea2020.3\c
aptureAgent\debugger-agent.jar -Dfile.encoding=UTF-8
C:\Users\41732>

Jstack

分析cpu飙高的原因

1. 找出cpu高的线程

top -p pid  -H  # -H表示只打印一次

2. 导出线程线程的栈信息

C:\Users\41732>jstack 9780  > aa.text

3. 在导出的栈信息中分析该线程正在执行的状态

  注意:top -p 输出的线程号是10进制,而jstack导出的文件线程号是16进制,需要转换。

jstack 19332 | grep -10 4b8f
"http-nio-8080-ClientPoller-0" #20 daemon prio=5 os_prio=0 tid=0x000000001f6a8000 nid=0x1fb8 runnable [0x0000000020cee000]
   java.lang.Thread.State: RUNNABLE
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
  at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
  at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
  - locked <0x000000076d2a11e0> (a sun.nio.ch.Util$3)
  - locked <0x000000076d2a11d0> (a java.util.Collections$UnmodifiableSet)
  - locked <0x000000076d2a1080> (a sun.nio.ch.WindowsSelectorImpl)
  at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
  at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1052)
  at java.lang.Thread.run(Thread.java:748)
"NioBlockingSelector.BlockPoller-1" #19 daemon prio=5 os_prio=0 tid=0x000000001f680000 nid=0x3c8 runnable [0x0000000020bef000]
   java.lang.Thread.State: RUNNABLE
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
  at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
  at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
  at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
  - locked <0x000000076d061bc8> (a sun.nio.ch.Util$3)
  - locked <0x000000076d060b20> (a java.util.Collections$UnmodifiableSet)
  - locked <0x000000076d05cdd0> (a sun.nio.ch.WindowsSelectorImpl)
  at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
  at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:342)

Cpu飙升的原因

  1. 线程死锁
  2. 线程内部有死循环
  3. 程序重有高频率的计算
  4. IO读写太高
  5. 频繁的发生GC
  6. 并发运行中的线程数太多

Jstat

打印GC信息

C:\Users\41732>jstat  -gc  9780 1000 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
14336.0 14336.0 4490.6  0.0   64000.0  35918.3   107520.0   12771.6   24448.0 23677.6 3200.0 2998.1      6    0.039   1      0.033    0.073
C:\Users\41732>
相关文章
|
4月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
66 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
4月前
|
SQL 缓存 Java
JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)
这篇文章详细介绍了JVM中类文件的初始化过程、硬件层面的数据一致性问题、缓存行和伪共享、指令乱序执行问题,以及如何通过`volatile`关键字和`synchronized`关键字来保证数据的有序性和可见性。
60 3
|
6月前
|
Java
Java常见JVM虚拟机指令(47个)
Java常见JVM虚拟机指令(47个)
91 3
Java常见JVM虚拟机指令(47个)
|
6月前
|
缓存 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法
【8月更文挑战第27天】在Java的演进历程中,invokedynamic指令的引入和Lambda表达式的出现无疑是两大重要里程碑。它们不仅深刻改变了Java的开发模式和性能表现,还极大地推动了Java在函数式编程和动态语言支持方面的进步。本文将从技术角度浅析JVM中的invokedynamic指令及其与Java Lambda语法的紧密联系。
88 0
|
7月前
|
监控 Java Linux
Linux下JVM相关指令详解及案例介绍
Linux下JVM相关指令详解及案例介绍
85 1
|
7月前
|
存储 运维 Java
Java中的字节码与JVM指令集详解
Java中的字节码与JVM指令集详解
|
9月前
|
存储 Java 索引
深入浅出JVM(十)之字节码指令(下篇)
深入浅出JVM(十)之字节码指令(下篇)
|
9月前
|
存储 Java 索引
深入浅出JVM(九)之字节码指令(上篇)
深入浅出JVM(九)之字节码指令(上篇)
|
9月前
|
存储 Java 调度
JVM指令手册
JVM指令手册汇总
|
9月前
|
存储 Java 编译器
深入理解JVM - 字节码指令
深入理解JVM - 字节码指令
136 0