一、如何查看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