4.jinfo使用

1.简介

jinfo(Java Virtual Machine Configuration Information)是JDK提供的一个可以实时查看Java虚拟机各种配置参数和系统属性的命令行工具。使用jps命令的-v参数可以查看Java虚拟机启动时显式指定的配置参数,如果想查看没有显式指定的配置参数就可以使用jinfo命令进行查看。另外,jinfo命令还可以查询Java虚拟机进程的System.getProperties()的内容。
jps常用

jps
jps -lvm

2.使用

获取帮助信息

jinfo
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

常用格式

jinfo [option] <pid>

参数解释

  • option:jinfo命令的可选参数。如果没有指定这个参数,jinfo命令会显示所有的配置参数和系统属性。
  • pid:要打印配置信息的Java虚拟机的进程ID。

常用命令
所有的pid都是1

2.1 查看jvm配置信息

jinfo 1

在这里插入图片描述
在这里插入图片描述

2.2 设置调试参数

显示指定名称对应的配置参数,比如,查看了简单GC日志模式(PrintGC)是否开启:

jinfo -flag PrintGC 1

在这里插入图片描述

启用或禁用指定名称的参数,该参数必须为Boolean类型。比如,开启简单GC日志模式:

jinfo -flag +PrintGC 1

在这里插入图片描述
比如,禁用简单GC日志模式:

jinfo -flag -PrintGC 1

在这里插入图片描述

这里有个不好用的地方,因为打开了简单日志,默认输出的标准输出。不好查看,最好可以指定输出路径。但是输出路径,不能用jinfo动态指定,需要在启动程序之前设置-Xloggc。为了不影响性能,需要手动关闭日志搜集。
jvm命令参数如下

-Xloggc:gc.log -XX:-PrintGC 

注意两个参数的先后顺序。

不需要重启Java虚拟机,修改指定名称的参数为指定的值。比如,修改空闲堆空间的最小百分比(MinHeapFreeRatio)为30%:

查看当前MinHeapFreeRatio

jinfo -flag MinHeapFreeRatio 1

在这里插入图片描述
修改

jinfo -flag MinHeapFreeRatio=30 1

在这里插入图片描述
当然不是所有参数都可以这样修改的,比如并发垃圾收集器将使用的线程数(ConcGCThreads):

jinfo -flag ConcGCThreads=5 1

在这里插入图片描述

2.3 配置参数说明

那么,有哪些配置参数是支持动态修改的呢?
这些参数是 JVM 运行时允许动态修改的,你可以通过 jinfo -flag 命令来修改这些参数。常见的可以动态修改的参数包括:

Heap Dump 参数:
HeapDumpOnOutOfMemoryError
HeapDumpPath

GC 日志相关参数:
PrintGC
PrintGCDetails
PrintGCTimeStamps
PrintGCDateStamps
PrintGCCause
PrintTenuringDistribution

Debug 相关参数:
DebugNonSafepoints

JVM 诊断参数:
UnlockDiagnosticVMOptions
UnlockCommercialFeatures

JVM 运行参数:
PrintClassHistogram
PrintConcurrentLocks

我们也可以通过java -XX:+PrintFlagsInitial命令找到标记为manageable的配置参数,运行结果如下图所示:

java -XX:+PrintFlagsInitial | grep manageable

在这里插入图片描述
一般不能动态修改的 JVM 参数
这些参数在 JVM 运行时是不能修改的,必须在 JVM 启动时指定。

-XX:CICompilerCount=2
说明:设置编译器线程的数量。通常用于控制JIT编译的并行度。

-XX:ConcGCThreads=1
说明:设置并发垃圾收集器的线程数。对于 G1 GC 或 CMS GC,这个参数控制垃圾回收的并发线程数。

-XX:G1HeapRegionSize=2097152
说明:设置 G1 垃圾收集器的堆区域大小。G1GC 将堆划分为多个相等大小的区域,堆区域大小决定了垃圾收集的粒度。

-XX:InitialHeapSize=4294967296
说明:设置 JVM 启动时的初始堆大小。

-XX:MarkStackSize=4194304
说明:设置垃圾收集器标记阶段的堆栈大小。

-XX:MaxHeapSize=4294967296
说明:设置 JVM 最大堆内存大小。

-XX:MaxNewSize=2575302656
说明:设置新生代内存的最大大小。

-XX:MinHeapDeltaBytes=2097152
说明:设置堆增长的最小粒度(以字节为单位)。

-XX:+UseCompressedClassPointers
说明:启用压缩类指针,用于减少内存占用。

-XX:+UseCompressedOops
说明:启用压缩普通对象指针(Oops),同样用于减少内存占用。

-XX:+UseG1GC
说明:启用 G1 垃圾收集器。

以键值对的方式显示当前Java虚拟机的全部的系统属性,比如:

jinfo -sysprops 1

在这里插入图片描述

3.理解JVM参数:-D -X -XX

D参数

-D参数用于设置系统属性,它允许您在JVM启动时指定一个键值对,其中键是属性名称,值是属性值。这些系统属性可以在Java应用程序中使用System.getProperty方法获取。-D参数的语法格式如下:
-Dkey=value
例如,下面的命令行将设置名为“myprop”的属性值为“myvalue”:
java -Dmyprop=myvalue MyApp
在应用程序中,您可以使用以下代码获取该属性的值:
String myPropValue = System.getProperty(“myprop”);

-X参数

-X参数用于设置非标准 JVM 参数,这些参数通常是 JVM 实现特有的,不同于标准的 Java SE 规范。它们用于调整 JVM 的性能或行为。-X参数的语法格式如下:
-Xoption
例如,下面的命令行将设置堆内存的大小为1024MB:
java -Xms1024m MyApp

-XX参数

-XX参数是JVM的调试和高级配置选项,用于更深入地控制JVM的行为和性能。这些参数通常只在开发或调试阶段使用,因为它们可能会对应用程序的性能产生影响。-XX参数的语法格式如下:
-XX:option=value
例如,下面的命令行将启用垃圾回收日志记录:
java -XX:+PrintGCDetails MyApp

4.结尾

对于调试和诊断 JVM 问题(如性能瓶颈、内存泄漏等),jinfo 是一个有用的工具。它提供了一种在应用程序运行时查看和修改 JVM 配置的简便方法。
jinfo 可能在不同的 JVM 实现和版本中有所不同,虽然它在大多数标准 JDK 中都是可用的,但在某些特殊 JVM 版本或定制 JVM 中可能不支持。

5.引用

https://blog.csdn.net/heihaozi/article/details/123570368
https://cloud.baidu.com/article/2769602

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值