前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM优化系列-------[2丶查看jvm的运行参数]

JVM优化系列-------[2丶查看jvm的运行参数]

作者头像
框架师
发布2019-10-12 01:49:32
7890
发布2019-10-12 01:49:32
举报
文章被收录于专栏:墨白的Java基地墨白的Java基地
  • 查看jvm的运行参数

有些时候我们需要查看jvm的运行参数,这个需求可能会存在2种情况:

第一,运行java命令时打印出运行参数;

第二,查看正在运行的java进程的参数;

  • 运行java命令时打印参数

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

测试: java -XX:+PrintFlagsFinal -version TestJVM

代码语言:javascript
复制
 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)

另一个版本:

代码语言:javascript
复制
 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类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值。

测试:

代码语言:javascript
复制
 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)
  • 查看正在运行的java进程的参数

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

tomcat安装流程:

代码语言:javascript
复制
 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,你们的和我应该不一样

代码语言:javascript
复制
 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>

代码语言:javascript
复制
 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 

百度字节转换的结果:

如果需要查看某一个参数的值:

代码语言:javascript
复制
1== 查看某一个参数的值
2[root@localhost bin]# jinfo -flag MaxNewSize 29210
3-XX:MaxNewSize=85262336
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 框架师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档