JVM参数及命令

JVM参数

1、jvm三种参数类型

  • 标准参数
    • -help:输出此帮助消息。
    • -cp:目录和 zip/jar 文件的类搜索路径。
    • -version:输出产品版本并退出。
    • -D<名称>=<值>:设置系统属性。
    • -showversion:输出产品版本并继续。
  • -X参数(非标准参数)
    • -Xint:解释模式,编译快 运行慢。
    • -Xcomp:编译模式,编译慢 运行快(一次编译,后面直接运行)。
    • -Xmixed:混合模式,由JVM自己决定,是JVM默认模式。
  • -XX参数(经常使用)
    • -XX:newSize
    • -XX:+PrintFlagsFinal:运行JAVA命令时打印参数。
    • -Xms:设置初始 Java 堆大小(等价于-XX:MaxHeapSize)。
    • -Xmx:设置最大 Java 堆大小(等价于-XX:InitialHeapSize)。
    • -XX:+PrintFlagsFinal:运行java命令时打印参数(=表示默认值,:=表示被修改值)。
    例:
      uintx AdaptiveSizeDecrementScaleFactor           = 4                                   {product}
      uintx AdaptiveSizeMajorGCDecayTimeScale         := 10                                  {product}
    
    # -showversion参数是表示,先打印版本信息,再执行后面的命令,在调试时非常有用,后面会使用到
    

2、jvm的标准参数

jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help检索出所有的标准参数。

C:\Users\13527>java -help
用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM
                  默认 VM 是 server.

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 ; 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  先输出产品版本并继续执行后面的命令
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

2.1、-server与-client参数

通过-server与-client设置jvm的运行参数。

  • 它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。
  • Client VM相对来说保守一些,初始堆空间小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但是运行速度会比Server VM模式慢些。
  • JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM。
  • 32位操作系统
    • 如果是Windows操作系统,不论硬件配置如何,都默认使用Client类型的JVM。
    • 如果是其它操作系统上,机器配置有2G以上的内存同时有2个以上的CPU的话,默认使用Server模式,否则使用Client模式。
  • 64位操作系统
    • 只有Server类型,不支持Client类型。

3、-X参数

JVM的-X参数是非标准参数,在不同版本的JVM中,参数可能会有所不同,可以通过java -X查看非标准参数。


C:\Users\13527>java -X
    -Xmixed           混合模式执行 (默认)
    -Xint             仅解释模式执行
    -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
                      设置搜索路径以引导类和资源
    -Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
                      附加在引导类路径末尾
    -Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
                      置于引导类路径之前
    -Xdiag            显示附加诊断消息
    -Xnoclassgc       禁用类垃圾收集
    -Xincgc           启用增量垃圾收集
    -Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)
    -Xbatch           禁用后台编译
    -Xms<size>        设置初始 Java 堆大小
    -Xmx<size>        设置最大 Java 堆大小
    -Xss<size>        设置 Java 线程堆栈大小
    -Xprof            输出 cpu 配置文件数据
    -Xfuture          启用最严格的检查, 预期将来的默认值
    -Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)
    -Xcheck:jni       对 JNI 函数执行其他检查
    -Xshare:off       不尝试使用共享类数据
    -Xshare:auto      在可能的情况下使用共享类数据 (默认)
    -Xshare:on        要求使用共享类数据, 否则将失败。
    -XshowSettings    显示所有设置并继续
    -XshowSettings:all
                      显示所有设置并继续
    -XshowSettings:vm 显示所有与 vm 相关的设置并继续
    -XshowSettings:properties
                      显示所有属性设置并继续
    -XshowSettings:locale
                      显示所有与区域设置相关的设置并继续

-X 选项是非标准选项, 如有更改, 恕不另行通知。#### 3.1、设置JVM运行模式实例

3.1、设置JVM运行模式实例

#强制设置为解释模式 
[root@node01 test]# java -showversion -Xint TestJVM 
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, interpreted mode)

hello 


#强制设置为编译模式 
[root@node01 test]# java -showversion -Xcomp TestJVM 
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, compiled mode)

hello 


#注意:编译模式下,第一次执行会比解释模式下执行慢一些,注意观察。 
#默认的混合模式 
[root@node01 test]# java -showversion TestJVM 
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

hello

4、-XX参数

-XX参数也是非标准参数,主要用于JVM的调优和debug操作。

-XX参数的使用有2种方式,一种是Boolean类型,一种是非Boolean类型。

  • Boolean类型(+表示启动,-表示禁用)
    • 格式:-XX:[±]表示启用或者禁用属性。
    • 例如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用System.gc()无效。
  • 非Boolean类型
    • 格式:-XX:= 表示属性的值为。
    • 例如:-XX:NewRatio=1 表示新生代和老年代的比值。

4.1、运行java命令时打印参数

运行java命令时打印参数,需要添加-XX:+PrintFlagsFinal参数即可。

注意:=表示默认值,:=表示被修改的值

C:\Users\13527>java -XX:+PrintFlagsFinal -version
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
     intx CMSMaxAbortablePrecleanTime               = 5000                                {product}
    uintx CMSOldPLABMax                             = 1024                                {product}
    uintx CMSOldPLABMin                             = 16                                  {product}
    uintx CMSOldPLABNumRefills                      = 4                                   {pd product}
    uintx InitialHeapSize                          := 266338304                           {product}
     bool PrintFlagsFinal                          := true                               {product}
    ccstr SyncKnobs                                 =                                     {product}
    ccstr TraceJVMTI                                =                                     {product}
     bool TraceLoaderConstraints                    = false   
     
                            ······
     
  {product}
     intx WorkAroundNPTLTimedWaitHang               = 1                                   {product}
    uintx YoungGenerationSizeIncrement              = 20                                  {product}
    uintx YoungGenerationSizeSupplement             = 80                                  {product}
    uintx YoungGenerationSizeSupplementDecay        = 8                                   {product}
    uintx YoungPLABSize                             = 4096                                {product}
     bool ZeroTLAB                                  = false                               {product}
     intx hashCode                                  = 5                                   {product}
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

4.2、查看正在运行的jvm参数

要查看正在运行的jvm就需要借助于jinfo命令查看,启动一个tomcat用于测试,来观察下运行的jvm参数。

#查看所有的参数,用法:jinfo -flags <进程id> 

#通过jps 或者 jps -l 查看java进程 
[root@node01 bin]# jps 
6346 Jps 
6219 Bootstrap 

[root@node01 bin]# jps -l 
6358 sun.tools.jps.Jps 
6219 org.apache.catalina.startup.Bootstrap 

[root@node01 bin]# 
[root@node01 bin]# jinfo -flags 6219
Attaching to process ID 6219, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 25.141-b15 
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=31457280 - XX:MaxHeapSize=488636416 -XX:MaxNewSize=162529280 -XX:MinHeapDeltaBytes=524288 - XX:NewSize=10485760 -XX:OldSize=20971520 -XX:+UseCompressedClassPointers - XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line: -Djava.util.logging.config.file=/tmp/apache-tomcat- 7.0.57/conf/logging.properties - Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager - Djava.endorsed.dirs=/tmp/apache-tomcat-7.0.57/endorsed -Dcatalina.base=/tmp/apache- tomcat-7.0.57 -Dcatalina.home=/tmp/apache-tomcat-7.0.57 -Djava.io.tmpdir=/tmp/apache- tomcat-7.0.57/temp 

#查看某一参数的值,用法:jinfo -flag <参数名> <进程id> 
[root@node01 bin]# jinfo -flag MaxHeapSize 6219 
-XX:MaxHeapSize=488636416

5、通过jstat命令进行查看堆内存使用情况

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

  • 命令格式:
    • jstat [-命令选项][vmid] [间隔时间/毫秒][查询次数]

5.1、查看class加载统计

[root@node01 ~]# jps 
7080 Jps 
6219 Bootstrap 

[root@node01 ~]# jstat -class 6219 
Loaded Bytes Unloaded Bytes Time 
  3273 7122.3       0   0.0 3.98

说明:

  • Loaded:加载class的数量。
  • Bytes:所占用空间大小。
  • Unloaded:未加载数量。
  • Bytes:未加载占用空间。
  • Time:时间。

5.2、查看编译统计

[root@node01 ~]# jstat -compiler 6219 
Compiled Failed Invalid Time FailedType FailedMethod 
    2376      1       0 8.04          1 org/apache/tomcat/util/IntrospectionUtils setProperty

说明:

  • Compiled:编译数量。
  • Failed:失败数量。
  • Invalid:不可用数量。
  • Time:时间。
  • FailedType:失败类型。
  • FailedMethod:失败方法。

5.3、垃圾回收统计

[root@node01 ~]# jstat -gc 6219 
S0C 		S1C 	S0U 	S1U 	EC 		EU 		OC 		OU 		MC 		MU 		CCSC 	CCSU 	YGC 	YGCT 	FGC 	FGCT 	GCT 
9216.0 		8704.0 	0.0 	6127.3 	62976.0 3560.4 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 	7 	1.078 		1 	0.244 	1.323 

#也可以指定打印的间隔和次数,每1秒中打印一次,共打印5次 
[root@node01 ~]# jstat -gc 6219 1000 5 

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323 
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323 
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323 
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323 
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9 23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323

说明:

  • S0C:第一个Survivor区的大小(KB)
  • S1C:第二个Survivor区的大小(KB)
  • S0U:第一个Survivor区的使用大小(KB)
  • S1U:第二个Survivor区的使用大小(KB)
  • EC:Eden区的大小(KB)
  • EU:Eden区的使用大小(KB)
  • OC:Old区大小(KB)
  • OU:Old使用大小(KB)
  • MC:方法区大小(KB)
  • MU:方法区使用大小(KB)
  • CCSC:压缩类空间大小(KB)
  • CCSU:压缩类空间使用大小(KB)
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值