专栏首页墨白的Java基地JVM优化系列-------[2丶查看jvm的运行参数]

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

  • 查看jvm的运行参数

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

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

第二,查看正在运行的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)
  • 查看正在运行的java进程的参数

如果想要查看正在运行的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

本文分享自微信公众号 - 框架师(mohu121)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hadoop3.x伪分布式及Hbase搭建与单词统计项目构建

    本节从0开始一步步搭建伪分布式及Hbase等。同时学习使用Intellij Maven构建Map-Reduce项目进行单词统计。

    公众号guangcity
  • matlibplot绘制各种图形

    0.导语1.预备知识1.1 np.arange()1.2 numpy.random.uniform()1.3 zip()2.bar绘制3.散点图4.3D图5.参...

    公众号guangcity
  • python进阶之异步任务

    本文学习视频来自莫凡python,下面是总结的学习内容。 关于星球,我在稍微阐述一点,我用自己的精力在星球中发布小项目,发布日打卡,共同来学习某一块知识,所以改...

    公众号guangcity
  • 回归Android,继续刷题

    这两天要做个安卓项目,哎,我之前是做安卓开发的,做了半年多,后面就没做了,距离现在至少1年半有余。

    公众号guangcity
  • 设计模式之观察者模式

    今天我继续和大家分享一下设计模式中的知识,今天我们来看一下观察者模式。观察者模式也可以叫发布订阅模式,在实际的场景中有很多时候会遇到这种设计模式。在现实的生活中...

    吉林乌拉
  • 如何理解数组在Java中作为一个类?【完整版】

    Java中数组的使用方法和C/C++中的比较类似,但是在Java中它的本质是一个Java类,只是这个类比较特殊,所以很容易被一些程序员误解。建议在回答该问题的时...

    用户4143945
  • TensorFlow线性回归与逻辑回归实战

    Huber loss是为了增强平方误差损失函数(squared loss function)对噪声(或叫离群点,outliers)的鲁棒性提出的。

    公众号guangcity
  • Java 并发编程(三):如何保证共享变量的可见性?

    上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保...

    沉默王二
  • django--ajax的使用,应用

    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服...

    测试开发社区
  • 玩转Mysql系列 - 第11篇:深入了解连接查询及原理

    当我们查询的数据来源于多张表的时候,我们需要用到连接查询,连接查询使用率非常高,希望大家都务必掌握。

    路人甲Java

扫码关注云+社区

领取腾讯云代金券