Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介绍

释放双眼,带上耳机,听听看~!

JVM介绍

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

JVM性能监控及调优的意义

JVM作为java程序运行时的环境,它的性能好坏直接影响java程序的性能,合适的环境对于java程序起着举足轻重的作用。

性能监控及调优工具

 

1. jps

jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),并可通过opt来查看这些进程的详细启动参数。

使用方式:


1
2
3
4
5
1$>jps
24600
38600 Jps
45052 TestClass1
5

可用参数:

-m 输出传递给main方法的参数


1
2
3
4
5
1$>jps -m
28464 Jps -m
34600
45052 TestClass1
5

-l 输出应用程序main class的完整package名或者应用程序的jar文件完整路径名


1
2
3
4
5
1$>jps -l
25552 sun.tools.jps.Jps
34600
45052 com.test.TestClass1
5

-v 输出传递给JVM的参数


1
2
3
4
5
1$>jps -v
24600  -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m
310988 Jps -Denv.class.path=.;D:\soft\jdk1.8.0_65\lib\dt.jar;D:\soft\jdk1.8.0_65\lib\tools.jar; -Dapplication.home=D:\soft\jdk1.8.0_65 -Xms8m
45052 TestClass1 -Dfile.encoding=UTF-8
5

-lmv 组合输出


1
2
3
4
5
1$>jps -lmv
24600  -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m
35052 com.test.TestClass1 -Dfile.encoding=UTF-8
47612 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\soft\jdk1.8.0_65\lib\dt.jar;D:\soft\jdk1.8.0_65\lib\tools.jar; -Dapplication.home=D:\soft\jdk1.8.0_65 -Xms8m
5

2. jinfo

jinfo 命令可以查看java进程的运行时jvm参数详细信息,例如最大堆内存、使用的什么垃圾收集器等

-flags pid 查看指定java进程的所有jvm运行参数


1
2
3
4
5
6
7
8
1$>jinfo -flags 5052
2Attaching to process ID 5052, please wait...
3Debugger attached successfully.
4Server compiler detected.
5JVM version is 25.65-b01
6Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2122317824 -XX:MaxNewSize=707264512 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
7Command line:  -Dfile.encoding=UTF-8
8

-flags [指定参数] pid 查看java进程指定jvm运行参数


1
2
3
1$>jinfo -flag InitialHeapSize 5052
2-XX:InitialHeapSize=134217728
3

3. jstat

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量

-class pid查看java进程类加载统计


1
2
3
4
1$>jstat -class 5052
2Loaded  Bytes  Unloaded  Bytes     Time
3  1663  3061.7        0     0.0       0.37
4

-compiler pid查看java进程编译统计


1
2
3
4
1$>jstat -compiler 5052
2Compiled Failed Invalid   Time   FailedType FailedMethod
3     659      0       0     0.52          0
4

-gc pid查看java进程垃圾回收统计


1
2
3
4
1$>jstat -gc 5052
2 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT  
35120.0 5120.0  0.0    0.0   33280.0  16650.3   87552.0      0.0     4480.0 767.4  384.0   75.8       0    0.000   0      0.000    0.00
4

-gccapacity pid查看java堆内存统计


1
2
3
4
1$>jstat -gccapacity 5052
2 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
3 43520.0 690688.0  43520.0 5120.0 5120.0  33280.0    87552.0  1381888.0    87552.0    87552.0      0.0 1056768.0   4480.0      0.0 1048576.0    384.0      0     0
4

4. jmap

JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。【内存分析】

-dump pid  dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名 


1
2
3
4
1$>jmap -dump:live,format=b,file=dump.hprof 5052
2Dumping heap to C:\Users\jasonspears\Desktop\dump.hprof ...
3Heap dump file created
4

-heap pid 打印heap的概要信息,GC使用的算法,heap的配置及使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1$>jmap -heap 5052
2Attaching to process ID 5052, please wait...
3Debugger attached successfully.
4Server compiler detected.
5JVM version is 25.65-b01
6
7using thread-local object allocation.
8Parallel GC with 4 thread(s)
9
10Heap Configuration:
11   MinHeapFreeRatio         = 0
12   MaxHeapFreeRatio         = 100
13   MaxHeapSize              = 2122317824 (2024.0MB)
14   NewSize                  = 44564480 (42.5MB)
15   MaxNewSize               = 707264512 (674.5MB)
16   OldSize                  = 89653248 (85.5MB)
17   NewRatio                 = 2
18   SurvivorRatio            = 8
19   MetaspaceSize            = 21807104 (20.796875MB)
20   CompressedClassSpaceSize = 1073741824 (1024.0MB)
21   MaxMetaspaceSize         = 17592186044415 MB
22   G1HeapRegionSize         = 0 (0.0MB)
23
24Heap Usage:
25PS Young Generation
26Eden Space:
27   capacity = 34078720 (32.5MB)
28   used     = 1022416 (0.9750518798828125MB)
29   free     = 33056304 (31.524948120117188MB)
30   3.0001596304086537% used
31From Space:
32   capacity = 5242880 (5.0MB)
33   used     = 0 (0.0MB)
34   free     = 5242880 (5.0MB)
35   0.0% used
36To Space:
37   capacity = 5242880 (5.0MB)
38   used     = 0 (0.0MB)
39   free     = 5242880 (5.0MB)
40   0.0% used
41PS Old Generation
42   capacity = 36175872 (34.5MB)
43   used     = 1863752 (1.7774124145507812MB)
44   free     = 34312120 (32.72258758544922MB)
45   5.151920042176178% used
46
475486 interned Strings occupying 442328 bytes.
48

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


1
2
3
4
5
6
7
1$>jmap -finalizerinfo 5052
2Attaching to process ID 5052, please wait...
3Debugger attached successfully.
4Server compiler detected.
5JVM version is 25.65-b01
6Number of objects pending for finalization: 0
7

 5. javap

javap是java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。

具体说明参考https://www.cnblogs.com/frinder6/p/5440173.html

给TA打赏
共{{data.count}}人
人已打赏
安全技术

详解Node.js API系列 Http模块(2) CNodejs爬虫实现

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索