☕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的官方地址

03b2120cbd0c4db4998d5d8ff593eaef_tplv-k3u1fbpfcp-watermark.JPG

功能介绍

  • JVM参数查询
  • JVM参数检查
  • JVM参数的变迁
  • JVM参数优化
  • JVM参数生成

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

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

参数查询

v2-98d1e098de31123d449572eb2de8b3a1_720w.jpg

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

参数检查

v2-c1b7d412108156f470f928acccb43dca_720w.jpg

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

参数变迁

v2-171d0ea1de0e84f3bb08df67208692f6_720w.jpg

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

参数优化

v2-9fdba19f033bd07fb85f2df83de433fc_720w.jpg

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

参数生成

v2-84e1cb9ca00b4d6bd0abf20120ab8dd8_720w.jpg

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

v2-b7b5b4f1738fbd7debac5a1aab0caebb_720w.jpg

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

-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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享