有些时候我们需要查看jvm的运行参数,这个需求可能会存在2种情况:
第一,运行java命令时打印出运行参数;
第二,查看正在运行的java进程的参数;
运行java命令打印参数,只需要添加-XX:+PrintFlagsFinal参数即可
测试: java -XX:+PrintFlagsFinal -version TestJVM
1[root@localhost test]# java -XX:+PrintFlagsFinal -version TestJVM
2[Global flags]
3ccstrlist AOTLibrary = {product} {default}
4 uintx AdaptiveSizeDecrementScaleFactor = 4 {product} {default}
5 uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product} {default}
6 uintx AdaptiveSizePolicyInitializingSteps = 20 {product} {default}
7 uintx AdaptiveSizePolicyOutputInterval = 0 {product} {default}
8 ============================= 忽略一大部分了 ============================
9 uintx YoungGenerationSizeSupplementDecay = 8 {product} {default}
10 size_t YoungPLABSize = 4096 {product} {default}
11 bool ZeroTLAB = false {product} {default}
12java version "9.0.4"
13Java(TM) SE Runtime Environment (build 9.0.4+11)
14Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
另一个版本:
1== 不含版本信息
2[root@localhost test]# java -XX:+PrintFlagsFinal TestJVM
3[Global flags]
4ccstrlist AOTLibrary = {product} {default}
5 uintx AdaptiveSizeDecrementScaleFactor = 4 {product} {default}
6 uintx AdaptiveSizeMajorGCDecayTimeScale = 10
7 ============================= 忽略一大部分了 ============================
8 uintx YoungGenerationSizeSupplementDecay = 8 {product} {default}
9 size_t YoungPLABSize = 4096 {product} {default}
10 bool ZeroTLAB = false {product} {default}
11mobaijun
以上结果都可以看出,参数有boolean类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值。
测试:
1[root@localhost test]# java -XX:+PrintFlagsFinal -XX:+VerifySharedSpaces -version TestJVM
2[Global flags]
3ccstrlist AOTLibrary = {product} {default}
4 ============================= 忽略一大部分了 ============================
5 uintx AdaptiveSizeDecrementScaleFactor = 4 {product} {default}
6 uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product} {default}
7 bool VerifyMergedCPBytecodes = true {product} {default}
8== 可以看到VerifySharedSpaces这个参数已经被修改了。
9 bool VerifySharedSpaces = true {product} {command line}
10 uintx YoungGenerationSizeIncrement = 20 {product} {default}
11 uintx YoungGenerationSizeSupplement = 80 {product} {default}
12 size_t YoungPLABSize = 4096 {product} {default}
13 bool ZeroTLAB = false {product} {default}
14java version "9.0.4"
15Java(TM) SE Runtime Environment (build 9.0.4+11)
16Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
如果想要查看正在运行的jvm就需要借助于jinfo命令查看,首先,启动一个tomcat用于测试,来观察下运行的jvm参数;
tomcat安装流程:
1== 安装tomcat流程
2rz 上传tomcat
3== 解压到/usr/locla目录下,建议此目录
4tar ‐xvf apache-tomcat-8.5.27.tar.gz -C /usr/local
5== 进入tomcat/bin目录下打开启动命令
6cd /usr/local/apache‐tomcat‐8.5.27 /bin
7== 启动tomcat
8[root@localhost bin]# ./startup.sh
9=============忽略内容================
10== 启动成功
11Tomcat started.
12#http://虚拟机访问IP:8080/ 进行访问
测试:
获取tomcat进程id,后面会用到,我的进程ID是29210,你们的和我应该不一样
1[root@localhost bin]# ps -ef|grep tomcat
2root 29210 1 0 15:41 pts/0 00:00:09 /usr/local/jdk-9.0.4/bin/java
3===============================忽略内容========================
4root 29322 28688 0 15:59 pts/0 00:00:00 grep --color=auto tomcat
5== 另一种方式获取进程ID,java自带的
6[root@localhost bin]# jps -l
7== tomcat的进程ID
829210 org.apache.catalina.startup.Bootstrap
9== jps的进程ID
1029355 jdk.jcmd/sun.tools.jps.Jps
== 查看所有的参数,命令:jinfo ‐flags <进程id>
1[root@localhost bin]# jinfo -flags 29210
2== 控制台打印jvm运行的参数
3VM Flags:
4== -XX:InitialHeapSize: jvm指定了堆内存初始大小,大概16兆
5== -XX:MaxHeapSize: jvm指定了堆内存最大值,大概244兆
6-XX:CICompilerCount=2 -XX:InitialHeapSize=16777216
7-XX:MaxHeapSize=255852544 -XX:MaxNewSize=85262336 -XX:MinHeapDeltaBytes=196608XX:NewSize=5570560 -XX:NonNMethodCodeHeapSize=5824844
8-XX:NonProfiledCodeHeapSize=122916698 -XX:OldSize=11206656
9-XX:ProfiledCodeHeapSize=122916698
10-XX:ReservedCodeCacheSize=251658240
11-XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers
12-XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseSerialGC
百度字节转换的结果:
如果需要查看某一个参数的值:
1== 查看某一个参数的值
2[root@localhost bin]# jinfo -flag MaxNewSize 29210
3-XX:MaxNewSize=85262336