jvm 性能监控命令


jvm 性能监控命令

 

 

*************************

jps:查看当前运行的java应用称序

 

命令格式:jps [options] [hostId]

 

-q:不输出主类名称

-m:传递给java main方法的参数

-l:输出类的全限定名,默认只输出类的名称

-v:输出java应用程序的jvm参数

 

hostId:主机的名称(如localhost),缺省则默认为当前主机

 

示例:jps -l

1424 org.jetbrains.idea.maven.server.RemoteMavenServer36
2320 jdk.jcmd/sun.tools.jps.Jps
14056 org.jetbrains.jps.cmdline.Launcher
8008
3836 com.example.demo.jvm.Test

 

 

*************************

jstat:jvm 统计信息(类加载、内存、gc等)

 

命令格式:jstat option pid [interval(s|ms)] [count]

命令说明:间隔interval查询相关信息,共查询count次,缺省则表示只查询一次

 

-class:类加载、卸载、总空间、加载时间

 

-gc:监视java堆,新生代、老年代、gc时间等

-gccapacity:输出java堆各区域使用的最大最小空间

-gcutil:输出已使用空间占总空间的百分比

-gccause:输出上次gc原因

 

-gcnew:输出新生代gc信息

-gccapacity:输出新生代使用的最大最小空间

-gcold:输出老年代gc信息

-gccapacity:输出老年代使用的最大最小空间

 

-compiler:输出jit编译的方法数量、耗时

-printcpmpilation:输出jit编译的方法

 

*******************

示例

 

jstat -class  8008

Loaded  Bytes  Unloaded  Bytes     Time
 61975 129886.3     1231  1393.0     177.89

 

jstat -gc 8008

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC
CGCT     GCT
4352.0 4352.0  0.0   1001.8 34944.0   8883.4   370500.0   327184.9  384208.0 367418.8 52744.0 46797.9    263    1.987   0      0.000  1
6      1.194    3.181

 

jstat -class 8008 2s 2

Loaded  Bytes  Unloaded  Bytes     Time
 61975 129886.3     1231  1393.0     177.89
 61975 129886.3     1231  1393.0     177.89

 

jstat -compiler 8008

Compiled Failed Invalid   Time   FailedType FailedMethod
   51427     14       0   239.94          1 com/intellij/psi/util/PsiTreeUtilKt walkUpToCommonParent

 

jstat -printcompilation 8008

Compiled  Size  Type Method
   51440     16    1 kotlin/SynchronizedLazyImpl isInitialized

 

 

*************************

jinfo:查看、修改虚拟机参数

 

命令格式:jinfo option pid

 

-flag name:查看虚拟机参数name

-flag -name:禁用虚拟机参数name

-flag +name:开启虚拟机参数name

-flag name=value:设置虚拟机参数name的值为value

 

*******************

示例

 

jinfo -flag UseSerialGC 8008:查看是否使用serial +serial old 组合

-XX:-UseSerialGC  //没有使用 serial + serial old垃圾回收组合

 

jinfo -flag UseG1 14380:查看是否使用g1垃圾收集器

-XX:+UseG1GC       //使用g1垃圾回收器进行回收

 

jinfo -flag InitialHeapSize 4084:查看初始堆大小

-XX:InitialHeapSize=134217728

 

 

*************************

jmap:生成堆转储快照

 

命令格式:jmap option pid

Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:[<histo-options>]] <pid>
        to connect to running process and print histogram of java object heap
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message


-clstats:类加载信息

-finalizerinfo:显示等待执行finalize、进行销毁的对象

-histo:堆中对象统计信息,实例数、类信息、占用空间

-dump:生成堆转储快照,如:-dump:live,format=b,file=filename(输出存活对象、二进制格式、名称filename

 

dump-options

    dump-options:
      live         dump only live objects
      all          dump all objects in the heap (default if one of "live" or "all" is not specified
      format=b     binary format
      file=<file>  dump heap to <file>

 

histo-options

    histo-options:
      live         count only live objects
      all          count all objects in the heap (default if one of "live" or "all" is not specified)
      file=<file>  dump data to <file>

 

*******************

示例

 

jmap -clstats 16904

Index Super InstBytes KlassBytes annotations   CpAll MethodCount Bytecodes MethodAll   ROAll   RWAll   Total ClassName
    1    -1   1830632        520           0       0           0         0         0      24     632     656 [B
    2    -1    184408        520           0       0           0         0         0      24     632     656 [I
    3    41    181200        688         136   17096         123      5428     45608   23792   41720   65512 java.lang.String
    4    -1    159448        520           0       0           0         0         0      24     632     656 [C
    5    41    139272        792           0   23928         152      5927     40320   29672   38088   67760 java.lang.Class
    6    41    120768        608           0    1384           7       149      1888    1200    3032    4232 java.util.HashMap$Node
    7    -1    107184        520           0       0           0         0         0      24     632     656 [Ljava.lang.Object;
    8    -1     58960        520           0       0           0         0         0      32     632     664 [Ljava.util.HashMap$Node;
    9     6     50120        608           0     504           1        10       632     312    1672    1984 java.util.LinkedHashMap$En
try

 

jmap -histo 16904(部分输出)

No dump file specified
 num     #instances         #bytes  class name (module)
-------------------------------------------------------
   1:         12286        2468920  [B (java.base@14.0.1)
   2:          1195         636080  [I (java.base@14.0.1)
   3:          9867         315744  java.util.HashMap$Node (java.base@14.0.1)
   4:           463         304392  [C (java.base@14.0.1)
   5:          9171         220104  java.lang.String (java.base@14.0.1)
   6:           957         178504  [Ljava.util.HashMap$Node; (java.base@14.0.1)
   7:          2966         161512  [Ljava.lang.Object; (java.base@14.0.1)
   8:          1140         139272  java.lang.Class (java.base@14.0.1)
   9:          6840         109440  java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry (java.base@14.0.1)

 

jmap -histo:file=histo 16904:输出到指定文件

Heap inspection file created: E:\java\IdeaProjects\springboot fastjson\histo

 

jmap -dump:live,format=b,file=dump 16904:内存快照信息输出到指定文件

Dumping heap to E:\java\IdeaProjects\springboot fastjson\dump ...
Heap dump file created [5805111 bytes in 0.025 secs]

 

 

*************************

jastck:生成线程快照(主要分析线程长时间停顿原因、cpu异常

 

命令格式:jstack [option] pid

Usage:
    jstack [-l][-e] <pid>
        (to connect to running process)

Options:
    -l  long listing. Prints additional information about locks
    -e  extended listing. Prints additional information about threads
    -? -h --help -help to print this help message

-l:输出锁信息

-e:输出线程信息

 

*******************

示例

 

jstack 4908

2020-07-20 17:18:37
Full thread dump Java HotSpot(TM) 64-Bit Server VM (14.0.1+7 mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x000002344283b1c0, length=12, elements={
0x0000023422b67800, 0x0000023441bae000, 0x0000023441baf000, 0x0000023441bce000,
0x0000023441bd1000, 0x0000023441bd2800, 0x0000023441bda800, 0x0000023442458800,
0x0000023441beb800, 0x0000023441b93000, 0x000002344274f800, 0x000002344282f000
}

"main" #1 prio=5 os_prio=0 cpu=67000.00ms elapsed=67.02s tid=0x0000023422b67800 nid=0x19ec runnable  [0x000000b3aa1fe000]
   java.lang.Thread.State: RUNNABLE
        at com.example.demo.jvm.Test.main(Test.java:21)

"Reference Handler" #2 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=67.00s tid=0x0000023441bae000 nid=0x3f88 waiting on condition  [0x00
0000b3aa8ff000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList(java.base@14.0.1/Native Method)
        at java.lang.ref.Reference.processPendingReferences(java.base@14.0.1/Reference.java:241)
        at java.lang.ref.Reference$ReferenceHandler.run(java.base@14.0.1/Reference.java:213)

"Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=67.00s tid=0x0000023441baf000 nid=0x294c in Object.wait()  [0x000000b3aa9ff00
0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@14.0.1/Native Method)
        - waiting on <0x0000000089b0b1b8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@14.0.1/ReferenceQueue.java:155)
        - locked <0x0000000089b0b1b8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@14.0.1/ReferenceQueue.java:176)
        at java.lang.ref.Finalizer$FinalizerThread.run(java.base@14.0.1/Finalizer.java:170)

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=66.98s tid=0x0000023441bce000 nid=0x472c runnable  [0x000000000000000
0]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" #5 daemon prio=5 os_prio=2 cpu=31.25ms elapsed=66.98s tid=0x0000023441bd1000 nid=0x20bc waiting on condition  [0x0000
000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #6 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=66.98s tid=0x0000023441bd2800 nid=0x3f60 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

daemon:线程后台运行

prio:线程优先级

os_prio:线程操作系统优先级

cpu:占用cpu时间

elapsed:实际运行时间

tid:线程在内存中地址

nid:线程在系统中的id

java.lang.Thread.State:线程运行状态(new、Runnable、blocked、waiting、timed_waiting、terminated)

public class Thread implements Runnable {

**********
内部枚举:Thread.State

    public enum State {

        NEW,       //线程创建,还没有调用start方法
        RUNNABLE,  //调用start方法,正在运行或者等待运行

        BLOCKED,   //线程等待获取锁(线程死锁)
        WAITING,        //线程等待
        TIMED_WAITING,  //限时等待

        TERMINATED;  //线程正常执行完毕、异常退出
    }

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值