JVM技术之旅-带你认识一下JVM调优利器XXFox

简介: JVM技术之旅-带你认识一下JVM调优利器XXFox

前提概要


好东西就是要拿出来与大家分享,本篇介绍一款可视化、能根据不同环境提供优化建议的JVM参数调优工具。


接下来先让我们看几个之前常用的JVM调优指令,Jstat和Jconsole、Jps指令。




jstat


jstat(JVM Statistics Monitoring Tool,虚拟机统计信息监视工具)是用于监视JVM各种运行时的状态信息的命令行工具,包括类加载、内存、垃圾收集、即时编译等运行时数据。


语法格式如下:


jstat [option vmid [interval [s | ms] [count ] ] ]

  • option : -gc 表示查看的是垃圾收集状况


  • vmid : 进程号


  • interval [s | ms] [count ]  : 500 10 : 每500ms查看一次,共查看 10 次


jstat使用示例:


  • 1.查找JVM启动的应用所属进程号


  • 2.使用jstat -gc 进程号 500 10 ;


比如:


jstat -gc 10344 500 10


使用jstat查看目标进程 10344 的垃圾收集状况,每500ms查看一次,共查看 10 次,如果不加后面两个参数,则表示只查看一次


-gc 表示查看的是垃圾收集状况


通过jstat -gc 10344查出结果为:

image.png


-gc表示查看垃圾收集状况,其中各列的含义如下(内存空间单位:KB,时间单位:秒):


S0C :幸存者0区容量
S1C :幸存者1区容量
S0U :幸存者0区已使用大小
S1U :幸存者1区已使用大小
EC :eden区容量
EU :eden区已使用大小
OC :老年代容量
OU :老年代已使用大小
MC :元数据空间容量
MU :元数据空间已使用大小
CCSC :压缩类空间容量
CCSU :压缩类空间已使用大小
YGC :年轻代GC次数
YGCT :年轻代GC耗时合计
FGC :整堆GC次数
FGCT :整堆GC耗时合计
GCT :所有GC耗时合计
复制代码


其中,CCS是压缩类空间,用于对象指针与类指针压缩,属于MetaSpace元数据空间的一部分,通过 -XX:+UseCompressedClassPointers-XX:+UseCompressedOops开启,默认开启。




jconsole


jconsole是一款对JVM的可视化监视管理工具,可以实时地监视JVM的内存、线程、类加载等信息的变化趋势


  • jconsoles是用 Java 写的 GUI 程序,用来监控 VM,并可监控远程的 VM,非常易用,而且功能非常强。命令行里打 jconsole,选则进程就可以了


  • 启动命令:jconsole


jps


jps(JVM Process Status Tool,虚拟机进程监控工具),这个命令可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及这些进程的本地虚拟机唯一 ID。这个 ID 被称为本地虚拟机唯一 ID(local virtual Machine Identifier,简写为LVMID)。如果你在 linux 的一台服务器上使用 jps 得到的 LVMID 其实就是和 ps 命令得到的 PID 是一样的。


语法格式如下:


jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。


options参数选项说明如下:


-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数
复制代码


使用(查看所有java进程)


jps -lv

当然还有jmap和jstack等其他的指令,接下来给大家讲一下今天的重头戏XXFox,睁大眼睛,来吧,让我们进入XXfox的世界!




xxFox


xxfox的官方地址

image.png




功能介绍


  • JVM参数查询


  • JVM参数检查


  • JVM参数的变迁


  • JVM参数优化


  • JVM参数生成


以实际例子来看看几个功能如何帮助我们完成JVM参数的调优工作,参数如下

-server -XX:PermSize=196m-XX:MaxPermSize=196m-Xmn320m-Xms768m-Xmx1024m



参数查询

image.png


提供常见参数的用法及建议,以及正常情况下的默认值。


参数检查


image.png



可以检查出输入参数的一些问题以及建议其它问题的建议。


参数变迁

image.png


适用于不同版本的JDK参数配置,防止一些无效的配置项产生。


参数优化

image.png


给出当前输入参数的优化建议,提高优化质量


参数生成

image.png


相当实用,可以根据软硬件的情况生成比较贴合实际的并且最优的参数配置。


image.png


生成后直接复制出来,形如:

-Xmx2688M -Xms2688M -Xmn960M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark -XX:ErrorFile=/tmp/hserrpid%p.log -Xloggc:/tmp/gc.log -XX:HeapDumpPath=/tmp -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC -XX:+PrintCommandLineFlags -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8090


相关文章
|
4天前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
2天前
|
监控 Java 编译器
Java虚拟机调优实战指南####
本文深入探讨了Java虚拟机(JVM)的调优策略,旨在帮助开发者和系统管理员通过具体、实用的技巧提升Java应用的性能与稳定性。不同于传统摘要的概括性描述,本文摘要将直接列出五大核心调优要点,为读者提供快速预览: 1. **初始堆内存设置**:合理配置-Xms和-Xmx参数,避免频繁的内存分配与回收。 2. **垃圾收集器选择**:根据应用特性选择合适的GC策略,如G1 GC、ZGC等。 3. **线程优化**:调整线程栈大小及并发线程数,平衡资源利用率与响应速度。 4. **JIT编译器优化**:利用-XX:CompileThreshold等参数优化即时编译性能。 5. **监控与诊断工
|
13天前
|
存储 监控 Java
JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
本文介绍了如何通过JVM参数打印GC日志,并通过示例代码展示了频繁YGC和FGC的场景。文章首先讲解了常见的GC日志参数,如`-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps`等,然后通过具体的JVM参数和代码示例,模拟了不同内存分配情况下的GC行为。最后,详细解析了GC日志的内容,帮助读者理解GC的执行过程和GC处理机制。
|
21天前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
26天前
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
1月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
40 3
|
1月前
|
安全 Java API
🌟探索Java宇宙:深入理解Java技术体系与JVM的奥秘
本文深入探讨了Java技术体系的全貌,从Java语言的概述到其优点,再到Java技术体系的构成,以及JVM的角色。旨在帮助Java开发者全面了解Java生态,提升对Java技术的认知,从而在编程实践中更好地发挥Java的优势。关键词:Java, JVM, 技术体系, 编程语言, 跨平台, 内存管理。
34 2
|
1月前
|
算法 Java
JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
本文详细介绍了JVM中的GC算法,包括年轻代的复制算法和老年代的标记-整理算法。复制算法适用于年轻代,因其高效且能避免内存碎片;标记-整理算法则用于老年代,虽然效率较低,但能有效解决内存碎片问题。文章还解释了这两种算法的具体过程及其优缺点,并简要提及了其他GC算法。
 JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
|
28天前
|
Java
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。
|
1月前
|
算法 Java
JVM进阶调优系列(3)堆内存的对象什么时候被回收?
堆对象的生命周期是咋样的?什么时候被回收,回收前又如何流转?具体又是被如何回收?今天重点讲对象GC,看完这篇就全都明白了。