Featured image of post JVM 运行时参数查询

JVM 运行时参数查询

JVM 对已经运行起来的进程查询参数或者环境变量等相关信息

前情提要

紧接此文的前情提要

在找到对应端口对应的文件目录后,有点绝望,JDK 目录连上了我的知识点,却击碎了我的幻想

但是咱不是善于认输的人,有没有什么办法可以看到正在运行的java进程的相关配置参数或者环境变量呢?

答案:有的,所以如下

但是即使知道了环境变量,由于是通过案例通过Tomcat部署(移植到类中直接运行失败),所以也无法排除是否是Tomcat发起连接还是业务代码发起连接

不管怎么说,学到了就记录

Jinfo

jinfo — 查看进程参数

jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括 Java System 属性 和 JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

jinfo -help 结果如下:

参数说明:

-flag <name>:打印指定名称的参数。 -flag [+|-]<name> :打开或关闭参数。 -flag <name>=<value> :设置参数。 -flags :打印当前指定java进程中已经设定的所有JVM参数信息。 -sysprops :打印当前java进程中设定的系统环境参数。 <no option> :打印上面两个选项。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
> jinfo -help
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

常用命令

-flag

普通用法

jinfo -flags pid

打印当前指定java进程中已经设定的所有JVM参数信息

输出如下

1
2
3
4
# 8008 修改为已知的 pid
C:\Users\Dan>"D:\Program Files\Java\jdk-17.0.11\bin\jinfo.exe" -flags 8008
VM Flags:
-XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=8 -XX:G1EagerReclaimRemSetThreshold=16 -XX:G1HeapRegionSize=2097152 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=266338304 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=4242538496 -XX:MaxNewSize=2543845376 -XX:MinHeapDeltaBytes=2097152 -XX:MinHeapSize=8388608 -XX:NonNMethodCodeHeapSize=5839372 -XX:NonProfiledCodeHeapSize=122909434 -XX:ProfiledCodeHeapSize=122909434 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:SoftMaxHeapSize=4242538496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation

此项返回值对于笔者来说,暂时没有多少有用的信息,所以有如下

打印指定名称的参数

注意是 -flag 而不是 flags

jinfo -flag [指定参数] pid

输出如下

1
2
3
# 8008 修改为已知的 pid
C:\Users\Dan>"D:\Program Files\Java\jdk-17.0.11\bin\jinfo.exe" -flag MinHeapDeltaBytes 24348
-XX:MinHeapDeltaBytes=2097152

打开或关闭参数

jinfo -flag [+/-][指定参数] pid,且参数必须被JVM支持

示例给出网上的结果

示例

运行如下

1
jinfo -flag +PrintGC 7663

查看

jinfo -flags 7663

image-20241205175431009

图中可见,参数已经成功添加

-sysprops

jinfo -sysprops pid

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 8008 修改为已知的 pid
C:\Users\Dan>"D:\Program Files\Java\jdk-17.0.11\bin\jinfo.exe" -sysprops 8008
Java System Properties:
#Tue Dec 03 16:00:11 CST 2024
java.specification.version=17
sun.cpu.isalist=amd64
sun.jnu.encoding=GBK
java.class.path=D\:\\ProgramFiles\\Tomcat\\Tomcat.11.0.0-fastjson\\bin\\bootstrap.jar;D\:\\ProgramFiles\\Tomcat\\Tomcat.11.0.0-fastjson\\bin\\tomcat-juli.jar
java.vm.vendor=Oracle Corporation
sun.arch.data.model=64
user.variant=
catalina.useNaming=true
.....
user.dir=D\:\\ProgramFiles\\Tomcat\\Tomcat.11.0.0-fastjson\\bin
.....

Ref

https://blog.csdn.net/wangzhongshun/article/details/122298396

Dan❤Anan
Built with Hugo
主题 StackJimmy 设计