JVM调优命令(上)

简介: JVM调优命令

一、jps


dbq@mac:~$ jps
50053 TIS_FullGC_Problem01
48599 Jps
92253


二、jinfo


列出当前jvm的详细信息


jinfo 50053

dbq@mac:~$ jinfo 50053
Attaching to process ID 50053, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.131-b11
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib
gopherProxySet = false
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = CN
user.dir = /Users/dbq/Documents/git/GCTest/out/production/GCTest
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_131-b11
java.awt.graphicsenv = sun.awt.CGraphicsEnvironment
os.arch = x86_64
java.endorsed.dirs = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/endorsed
line.separator =
java.io.tmpdir = /var/folders/fg/7tr0w_412q7ffqmyhy48jnn40000gn/T/
java.vm.specification.vendor = Oracle Corporation
os.name = Mac OS X
sun.jnu.encoding = UTF-8
java.library.path = /Users/dbq/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 10.13.1
http.nonProxyHosts = local„ÄÅ169.254/16|*.local„ÄÅ169.254/16
user.home = /Users/dbq
user.timezone =
java.awt.printerjob = sun.lwawt.macosx.CPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = dbq
java.class.path = .
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = com.mashibing.jvm.gc.TIS_FullGC_Problem01
java.home = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
user.language = zh
java.specification.vendor = Oracle Corporation
user.language.format = en
awt.toolkit = sun.lwawt.macosx.LWCToolkit
java.vm.info = mixed mode
java.version = 1.8.0_131
java.ext.dirs = /Users/dbq/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
sun.boot.class.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/classes
java.vendor = Oracle Corporation
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
socksNonProxyHosts = local„ÄÅ169.254/16|*.local„ÄÅ169.254/16
ftp.nonProxyHosts = local„ÄÅ169.254/16|*.local„ÄÅ169.254/16
sun.cpu.isalist =
VM Flags:
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=209715200 -XX:MaxHeapSize=209715200 -XX:MaxNewSize=69730304 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=69730304 -XX:OldSize=139984896 -XX:+PrintGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xms200M -Xmx200M -XX:+PrintGC


VM Flags:jvm参数信息


三、jstat


打印java的统计信息


jstat -gc pid 打印gc的统计信息

dbq@mac:~$ jstat -gc 50053
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
8192.0 8192.0  0.0   8180.3 50688.0  39484.0   136704.0   78432.0   4864.0 4024.3 512.0  441.3       5    0.184   0      0.000    0.184


也可以动态的统计


jstat -gc 48369 500 每500ms打印一次统计信息

dbq@mac:~$ jstat -gc 50053 500
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
22528.0 22528.0  0.0   15684.3 23040.0  17325.8   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  17478.7   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  17936.7   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  18456.8   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  18784.2   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  18784.2   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266
22528.0 22528.0  0.0   15684.3 23040.0  19020.5   136704.0   97600.1   4864.0 4024.3 512.0  441.3       7    0.266   0      0.000    0.266


查看GC频率


ps -eo pid,tty,user,comm,lstart,etime | grep 24019

dbq@mac:$ ps -eo pid,tty,user,comm,lstart,etime | grep 40536
40536 ttys001  dbq              java             一  3/ 1 08:30:05 2021            02:20


GC频率 = 进程运行时间/GC次数


四、垃圾回收信息的解释


之前由于添加了printGC,所以会打印gc回收信息,一般循环打印,并指定大小

GC指的是YGC,从多少k回收到多少k,相减就是回收的内存大小


FullGC

dbq@mac:~/Documents/git/GCTest/out/production/GCTest$ java -Xms200M -Xmx200M -XX:+PrintGC com.mashibing.jvm.gc.TIS_FullGC_Problem01
[GC (Allocation Failure)  51712K->1256K(196608K), 0.0023883 secs]
[GC (Allocation Failure)  52968K->23238K(196608K), 0.0523418 secs]
[GC (Allocation Failure)  74950K->44536K(196608K), 0.0491664 secs]
[GC (Allocation Failure)  96248K->67248K(196608K), 0.0435336 secs]
[GC (Allocation Failure)  118960K->86612K(195584K), 0.0364209 secs]
[GC (Allocation Failure)  137300K->105244K(167936K), 0.0478008 secs]
[GC (Allocation Failure)  128284K->113284K(182272K), 0.0342078 secs]
[GC (Allocation Failure)  136324K->120780K(182272K), 0.0440687 secs]
[GC (Allocation Failure)  143820K->131652K(182272K), 0.0488463 secs]
[Full GC (Ergonomics)  131652K->126984K(182272K), 0.9244073 secs]
[Full GC (Ergonomics)  150024K->135637K(182272K), 0.4714047 secs]
[Full GC (Ergonomics)  158677K->143194K(182272K), 0.5033654 secs]
[Full GC (Ergonomics)  159727K->147805K(182272K), 0.5497019 secs]
[Full GC (Ergonomics)  159727K->151623K(182272K), 0.5586325 secs]
[Full GC (Ergonomics)  159727K->154162K(182272K), 0.5261450 secs]
[Full GC (Ergonomics)  159727K->155930K(182272K), 0.5602670 secs]
[Full GC (Ergonomics)  159727K->157209K(182272K), 0.5733866 secs]


五、top


top命令可以查看哪些进程占用资源比较多


六、top -Hp pid


top命令可以查看进程中线程占用资源情况


由于mac下 -Hp不支持,这是linux下其他进程的线程信息

top - 15:30:44 up 117 days, 14 min,  1 user,  load average: 0.00, 0.00, 0.00
Threads:  52 total,   0 running,  52 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
MiB Mem :   3637.6 total,    327.2 free,    993.9 used,   2316.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   2387.5 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 3489 root      20   0 3497204 535276  18008 S   0.7  14.4 606:02.57 System Clock
 3464 root      20   0 3497204 535276  18008 S   0.0  14.4   0:00.00 java
 3467 root      20   0 3497204 535276  18008 S   0.0  14.4   0:07.24 java
 3469 root      20   0 3497204 535276  18008 S   0.0  14.4   0:09.84 java
 3470 root      20   0 3497204 535276  18008 S   0.0  14.4   0:09.88 java
 3471 root      20   0 3497204 535276  18008 S   0.0  14.4   1:20.66 VM Thread
 3472 root      20   0 3497204 535276  18008 S   0.0  14.4   0:00.03 Reference Handl
 3473 root      20   0 3497204 535276  18008 S   0.0  14.4   0:00.01 Finalizer
 3474 root      20   0 3497204 535276  18008 S   0.0  14.4   0:00.00 Signal Dispatch
 3475 root      20   0 3497204 535276  18008 S   0.0  14.4   0:42.07 C2 CompilerThre
 3476 root      20   0 3497204 535276  18008 S   0.0  14.4   0:19.02 C1 CompilerThre
 3477 root      20   0 3497204 535276  18008 S   0.0  14.4   0:00.00 Service Thread
 3478 root      20   0 3497204 535276  18008 S   0.0  14.4  25:44.90 VM Periodic Tas
 3481 root      20   0 3497204 535276  18008 S   0.0  14.4   2:17.25 Catalina-utilit
 3482 root      20   0 3497204 535276  18008 S   0.0  14.4   2:18.40 Catalina-utilit


相关文章
|
8天前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
15天前
|
监控 Java 编译器
Java虚拟机调优指南####
本文深入探讨了Java虚拟机(JVM)调优的精髓,从内存管理、垃圾回收到性能监控等多个维度出发,为开发者提供了一系列实用的调优策略。通过优化配置与参数调整,旨在帮助读者提升Java应用的运行效率和稳定性,确保其在高并发、大数据量场景下依然能够保持高效运作。 ####
22 1
|
17天前
|
存储 算法 Java
JVM进阶调优系列(10)敢向stop the world喊卡的G1垃圾回收器 | 有必要讲透
本文详细介绍了G1垃圾回收器的背景、核心原理及其回收过程。G1,即Garbage First,旨在通过将堆内存划分为多个Region来实现低延时的垃圾回收,每个Region可以根据其垃圾回收的价值被优先回收。文章还探讨了G1的Young GC、Mixed GC以及Full GC的具体流程,并列出了G1回收器的核心参数配置,帮助读者更好地理解和优化G1的使用。
|
18天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
38 1
|
28天前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
26天前
|
监控 Java 编译器
Java虚拟机调优实战指南####
本文深入探讨了Java虚拟机(JVM)的调优策略,旨在帮助开发者和系统管理员通过具体、实用的技巧提升Java应用的性能与稳定性。不同于传统摘要的概括性描述,本文摘要将直接列出五大核心调优要点,为读者提供快速预览: 1. **初始堆内存设置**:合理配置-Xms和-Xmx参数,避免频繁的内存分配与回收。 2. **垃圾收集器选择**:根据应用特性选择合适的GC策略,如G1 GC、ZGC等。 3. **线程优化**:调整线程栈大小及并发线程数,平衡资源利用率与响应速度。 4. **JIT编译器优化**:利用-XX:CompileThreshold等参数优化即时编译性能。 5. **监控与诊断工
|
1月前
|
存储 监控 Java
JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
本文介绍了如何通过JVM参数打印GC日志,并通过示例代码展示了频繁YGC和FGC的场景。文章首先讲解了常见的GC日志参数,如`-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps`等,然后通过具体的JVM参数和代码示例,模拟了不同内存分配情况下的GC行为。最后,详细解析了GC日志的内容,帮助读者理解GC的执行过程和GC处理机制。
|
2月前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
2月前
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
2月前
|
Java
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。