JVM 性能调优- 一次生产jvm假死情况分析


top

语法结构:

Usage: jstat -help|-options

       jstat -<option> [-t] [-h<lines>] <vmid> [<interva[s|ms]> [<count>]]

参数解释:

Options — 选项,我们一般使用 -gcutil 查看gc情况

vmid      — VM的进程号,即当前运行的java进程号

interval[s|ms]  ——  间隔时间,单位为秒或者毫秒,默认为ms。必须是正整型。

count     — 打印次数,如果缺省则打印无数次

输出参数:

-hn 每个n行输出一次列表头。默认为0,仅输出一次。

-tn 在第一列输出时间戳。该时间戳从jvm启动开始。

-JjavaOption

具体参数:

-class: 统计class loader 行为信息

-compiler: 统计编译行为信息

-gc:统计jdk gc时heap信息

-gccapacity:统计不同的generations(新生代、老生代、永久代)相应的heap容量信息

-gccause:统计gc的情况,以及引起gc的事情。同-gcutil

-gcnew:统计新生代的gc情况

-gcnewcapacity:统计新生代gc时heap的容量信息

-gcold:统计老生代的gc情况

-gcoldcapacity:统计老生代gc时heap容量信息

-gcpermcapacity:统计永久代gc时的容量信息

-gcutil:统计heap的gc情况

-printcompilation:没用过

jstat -gcutil :

结果信息:

S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

jstat -gcutil 26543 2000

jstat -gcutil 19773 2000

jstat -gccause 19773 2000

S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT

31.25   0.00  96.61  72.71  94.79  91.82 473252 2913.380   284   53.532 2966.913

25.00   0.00  43.08  74.66  94.79  91.82 473326 2913.828   284   53.532 2967.361  20210821

0.00  31.25  82.67  88.09  94.79  91.82 478365 2945.164   287   54.221 2999.385

jstat -gc -t 26543 10000 30
         S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间s

imestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
3418004.1 512.0  512.0   0.0   160.0  67072.0  39987.6   136704.0   122092.4  100672.0 95422.5 13184.0 12105.6 478413 2945.484  287    54.221 2999.705
3418014.0 512.0  512.0   0.0   128.0  67072.0  32122.1   136704.0   122140.4  100672.0 95422.5 13184.0 12105.6 478415 2945.498  287    54.221 2999.719
3418024.1 512.0  512.0   0.0   128.0  67072.0  22942.5   136704.0   122212.4  100672.0 95422.5 13184.0 12105.6 478417 2945.514  287    54.221 2999.735

3418631.5 512.0  512.0  160.0   0.0   67072.0  47146.4   136704.0   126124.8  100672.0 95422.5 13184.0 12105.6 478530 2946.142  287    54.221 3000.363

ygc 非常大  增加  478530 -  478417 


jstat -gcmetacapacity 26543

MCMN: 最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间s
GCT:垃圾回收消耗总时间s

MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT   
       0.0  1136640.0   100672.0        0.0  1048576.0    13184.0 478450   287   54.221 2999.940

jstat -gcutil 26543 10000 30

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00  31.25  25.46  92.96  94.79  91.82 478559 2946.342   287   54.221 3000.563
  0.00  25.00  13.11  92.99  94.79  91.82 478561 2946.355   287   54.221 3000.576
  0.00  37.50   0.76  93.05  94.79  91.82 478563 2946.369   287   54.221 3000.590

  31.25   0.00  56.27  62.44  94.79  91.82 478868 2948.295   288   54.408 3002.703
  0.00  31.25  19.51  62.95  94.79  91.82 478887 2948.430   288   54.408 3002.838
  0.00  31.25   6.02  62.99  94.79  91.82 478889 2948.444   288   54.408 3002.852
 25.00   0.00  93.16  63.00  94.79  91.82 478890 2948.451   288   54.408 3002.858
 31.25   0.00  78.52  63.07  94.79  91.82 478892 2948.462   288   54.408 3002.870
 25.00   0.00  66.24  63.12  94.79  91.82 478894 2948.473   288   54.408 3002.881

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat -gc pid time : -gc 监控jvm的gc信息,pid 监控的jvm进程id,time每个多少毫秒刷新一次
jstat -gccause pid time : -gccause 监控gc信息并显示上次gc原因,pid 监控的jvm进程id,time每个多少毫秒刷新一次
jstat -class pid time: -class 监控jvm的类加载信息,pid 监控的jvm进程id,time每个多少毫秒刷新一次


jstat -gccause 26543 10000

S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
  0.00  31.25  40.82  94.07  94.79  91.82 478601 2946.596   287   54.221 3000.817 Allocation Failure   No GC               
  0.00  31.25  27.43  94.11  94.79  91.82 478603 2946.608   287   54.221 3000.829 Allocation Failure   No GC

  0.00  31.25  15.38  61.90  94.79  91.82 480517 2958.814   293   55.501 3014.315 Allocation Failure   No GC               
  0.00  25.00   0.22  61.97  94.79  91.82 480519 2958.827   293   55.501 3014.328 Allocation Failure   No GC

jstat -class 26543 10000

Loaded  Bytes  Unloaded  Bytes     Time   
 21081 34705.1     3345  3034.0      46.40
 21081 34705.1     3345  3034.0      46.40
 21081 34705.1     3345  3034.0      46.40
 
jstat -gcoldcapacity -t 26543 250 3
imestamp          OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   
      3420001.3    136704.0    341504.0    136704.0    136704.0 478786   287   54.221 3001.995
      3420001.6    136704.0    341504.0    136704.0    136704.0 478786   287   54.221 3001.995
      3420001.8    136704.0    341504.0    136704.0    136704.0 478786   287   54.221 3001.995

/admin/java/jdk1.8.0_121/bin/jmap -heap 26543

Attaching to process ID 26543, 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              = 524288000 (500.0MB)
   NewSize                  = 69730304 (66.5MB)
   MaxNewSize               = 174587904 (166.5MB)
   OldSize                  = 139984896 (133.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 = 68681728 (65.5MB)
   used     = 38726984 (36.93292999267578MB)
   free     = 29954744 (28.56707000732422MB)
   56.386152660573714% used
From Space:
   capacity = 524288 (0.5MB)
   used     = 131072 (0.125MB)
   free     = 393216 (0.375MB)
   25.0% used
To Space:
   capacity = 524288 (0.5MB)
   used     = 0 (0.0MB)
   free     = 524288 (0.5MB)
   0.0% used
PS Old Generation
   capacity = 139984896 (133.5MB)
   used     = 98437392 (93.87721252441406MB)
   free     = 41547504 (39.62278747558594MB)
   70.32000938158357% used

eap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 524288000 (500.0MB)
   NewSize                  = 69730304 (66.5MB)
   MaxNewSize               = 174587904 (166.5MB)
   OldSize                  = 139984896 (133.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 = 68681728 (65.5MB)
   used     = 18937552 (18.060256958007812MB)
   free     = 49744176 (47.43974304199219MB)
   27.57291138627147% used
From Space:
   capacity = 524288 (0.5MB)
   used     = 131072 (0.125MB)
   free     = 393216 (0.375MB)
   25.0% used
To Space:
   capacity = 524288 (0.5MB)
   used     = 0 (0.0MB)
   free     = 524288 (0.5MB)
   0.0% used
PS Old Generation
   capacity = 139984896 (133.5MB)
   used     = 86227816 (82.2332534790039MB)
   free     = 53757080 (51.266746520996094MB)
   61.5979426809018% used


 sudo -u useradmin /user/java/jdk1.8.0_121/bin/jmap -dump
:live,file=/user/gcerr/26543jmap0821.hprof 26543
Dumping heap to /user/gcerr/26543jmap0821.hprof ...
Heap dump file created

查看进程号为26543的进程中的线程情况
top -H -p 26543

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND            
26924 useradmin   20   0 4401136 609684  17412 S  2.0  3.7 744:46.28 java               
26672 useradmin   20   0 4401136 609684  17412 S  0.3  3.7  13:16.23 java               
26703 useradmin   20   0 4401136 609684  17412 S  0.3  3.7 286:31.89 java               
26543 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:00.00 java               
26545 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:14.03 java               
26546 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  23:44.97 java               
26547 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  23:44.63 java               
26548 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  23:39.39 java               
26549 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  23:41.38 java               
26550 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  34:11.82 java               
26551 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:09.80 java               
26552 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:16.48 java               
26553 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:00.00 java               
26554 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   1:02.84 java               
26660 useradmin   20   0 4401136 609684  17412 S  0.0  3.7  23:18.27 java               
26661 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   0:03.03 java               
26662 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   5:06.04 java               
26663 useradmin   20   0 4401136 609684  17412 S  0.0  3.7   6:33.34 java

 printf "%x\n" 26924
692c

jstack 26543| grep 692c

[useradmin@host-172-21-182-11 ~]$ jstack 26543| grep 692c
"sentinel-metrics-record-task-thread-1" #97 daemon prio=5 os_prio=0 tid=0x00007fc864195000 nid=0x692c waiting on condition [0x00007fc7eb2e2000]


/user/java/jdk1.8.0_121/bin/jmap -histo:live 26543 | more

 /user/java/jdk1.8.0_121/bin/jmap -histo:live 26543 | more

 num     #instances         #bytes  class name
----------------------------------------------
   1:        846658       27093056  com.alibaba.csp.sentinel.slots.statistic.base.Long
Adder
   2:        108191       10545264  [C
   3:        140109        5604360  [Lcom.alibaba.csp.sentinel.slots.statistic.base.Lo
ngAdder;
   4:         43595        5153504  [Ljava.lang.Object;
   5:        140109        4483488  com.alibaba.csp.sentinel.slots.statistic.base.Wind
owWrap
   6:        140109        3362616  com.alibaba.csp.sentinel.slots.statistic.data.Metr
icBucket
   7:        107695        2584680  java.lang.String
   8:         18930        2088800  java.lang.Class
   9:         62208        1990656  java.util.concurrent.ConcurrentHashMap$Node
  10:         16537        1455256  java.lang.reflect.Method
  11:         28537        1369776  java.util.HashMap
  12:         29560        1182400  java.util.LinkedHashMap$Entry

2021-8-21 15:49
num     #instances         #bytes  class name
----------------------------------------------
   1:        846706       27094592  com.alibaba.csp.sentinel.slots.statistic.base.Long
Adder
   2:        108226       10547432  [C
   3:        140117        5604680  [Lcom.alibaba.csp.sentinel.slots.statistic.base.Lo
ngAdder;
   4:         43942        5172760  [Ljava.lang.Object;
   5:        140117        4483744  com.alibaba.csp.sentinel.slots.statistic.base.Wind
owWrap
   6:        140117        3362808  com.alibaba.csp.sentinel.slots.statistic.data.Metr
icBucket
   7:        107730        2585520  java.lang.String
   8:         18930        2088800  java.lang.Class
   9:         62208        1990656  java.util.concurrent.ConcurrentHashMap$Node
  10:         16537        1455256  java.lang.reflect.Method
  11:         28557        1370736  java.util.HashMap
  12:         29560        1182400  java.util.LinkedHashMap$Entry
  13:          8673        1132928  [B
  14:          9550        1017056  [I
  15:         12344         886560  [Ljava.util.HashMap$Node;

 /user/java/jdk1.8.0_121//bin/java  -jar -d64 -Xms200M -Xmx800M  -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/user/gcerr/gclogs.log -server /user/project/gateway.jar

-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=4 -XX:+UseAdaptiveSizePolicy -XX:MaxHeapSize=2147483648 -XX:MaxNewSize=1073741824 -XX:NewSize=1073741824 -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来AI编程

共鸣===鼓励 打赏您随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值