前提概要
好东西就是要拿出来与大家分享,本篇介绍一款可视化、能根据不同环境提供优化建议的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查出结果为:
-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
功能介绍
- JVM参数查询
- JVM参数检查
- JVM参数的变迁
- JVM参数优化
- JVM参数生成
以实际例子来看看几个功能如何帮助我们完成JVM参数的调优工作,参数如下
-server -XX:PermSize=196m-XX:MaxPermSize=196m-Xmn320m-Xms768m-Xmx1024m
参数查询
提供常见参数的用法及建议,以及正常情况下的默认值。
参数检查
可以检查出输入参数的一些问题以及建议其它问题的建议。
参数变迁
适用于不同版本的JDK参数配置,防止一些无效的配置项产生。
参数优化
给出当前输入参数的优化建议,提高优化质量
参数生成
相当实用,可以根据软硬件的情况生成比较贴合实际的并且最优的参数配置。
生成后直接复制出来,形如:
-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