jvm参数及其配置和默认值等问题

一、如何查看java 1.8 默认jvm参数

问题:如何查看本机上用java -jar aaaaa.jar命令启动的程序的jvm默认参数配置信息?

[root@localhost ~]# java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=328965888 -XX:MaxHeapSize=5263454208 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

或者更详细的:

[root@localhost ~]# java -XX:+PrintFlagsFinal -version
[Global flags]
     intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}
     bool AggressiveHeap                            = false                               {product}
     bool AggressiveOpts                            = false                               {product}
	..............

或者过滤下:

[root@localhost ~]# java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
    uintx MaxHeapSize                              := 8434745344                          {product}

二、常用参数说明

  • 1、-Xmn 设置年轻代(Eden+2*Survivor)大小(以字节为单位),附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。默认年轻代的最大空间量是堆总大小的三分之一。

  • 2、-Xms 设置初始堆的大小(以字节为单位),也是最小堆的大小,它等价于:-XX:InitialHeapSize,附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。此数量至少为8 MB。在64位JVM上,默认为物理内存的1/64。

  • 3、-Xmx 设置最大堆的大小(以字节为单位),它等价于-XX:MaxHeapSize。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。在64位JVM上,默认的最大堆大小为物理内存的四分之一。

说明:-Xm与-Xmx经常设置为相同的值。关于这些参数的动态默认值可参看:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size

  • 4、-Xss 设置每个线程的堆栈大小(以字节为单位),附加字母k或K表示KB,m或M表示MB,g或G表示GB。默认值取决于平台:
Linux / ARM(32位):320 KB
Linux / i386(32位):320 KB
Linux / x64(64位):1024 KB
OS X(64位):1024 KB
Oracle Solaris / i386(32位):320 KB
Oracle Solaris / x64(64位):1024 KB
  • 5、-XX:+DisableExplicitGC 忽略手动调用GC, System.gc()的调用就会变成一个空调用,完全不触发GC

更多参数请见官网https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/

注意

  • -Xms等价于 -XX:InitialHeapSize

  • -Xmx等价于 -XX:MaxHeapSize

三、jinfo工具及其使用

问题:如何查看一个正在运行中的java程序,它的某个JVM参数是否开启,某个参数的配置为多少?

这时可以使用jinfo工具来查看。示例如下:

## 查看java进程的进程ID
[root@localhost ~]# jps -l
22945 com.weishao.dbswitch.webapi.WebServiceApplication
21064 kafka.Kafka
9875 sun.tools.jps.Jps
1180 org.apache.zookeeper.server.quorum.QuorumPeerMain
16574 remoting.jar

## 查看jinfo的参数
[root@localhost ~]# jinfo -h
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

## 检查已在的java进程(PID=22945)是否启用了PrintGCDetails标识
[root@localhost ~]# jinfo -flag PrintGCDetails 22945
-XX:-PrintGCDetails

## 查看已在的java进程(PID=22945)的MetaspaceSize设置
[root@localhost ~]# jinfo -flag MetaspaceSize 22945
-XX:MetaspaceSize=21807104

[root@localhost ~]# jinfo -flag InitialHeapSize  22945
-XX:InitialHeapSize=1073741824

## 检查已在的java进程(PID=22945)的JVM配置参数
[root@localhost ~]# jinfo -flags 22945
Attaching to process ID 22945, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.112-b15
Non-default VM flags: -XX:CICompilerCount=12 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=536870912 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=536870912 -XX:OldSize=536870912 -XX:+PrintFlagsFinal -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xms1024m -Xmx1024m -Xmn512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintFlagsFinal -Dfile.encoding=UTF-8

结果结果:

  • -XX:+PrintGCDetails,表示开启打印 GC 收集细节(默认不开启)

  • -XX:-PrintGCDetails,表示未开启打印 GC 收集细节

四、JVM参数使用手册

地址: https://segmentfault.com/a/1190000010603813

五、XPocket工具

地址:https://github.com/PerfMa/xpocket

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值