JDK 的 bin 目录下为 Java 开发人员提供了很多实用的小工具,很多场景下都会用到它们,比如:打包、部署、签名、调试、监控、运维等。本文介绍其中一款:
jinfo (Configuration Info for Java): Java 配置信息工具
功能
实时查看和调整虚拟机各项参数:
使用
jps -v
命令可以查看虚拟机启动时显式指定的参数列表,而使用jinfo -flag
命令可以查询未被显式指定的参数的系统默认值。- 对于 JDK 6 及以上版本,还可以使用
java- XX:+PrintFlagsFinal
查看参数默认值(命令:$ java -XX:+PrintFlagsFinal -version
)。
- 对于 JDK 6 及以上版本,还可以使用
使用
jinfo -sysprops
命令可以打印虚拟机进程的 System.getProperties() 的内容。JDK 6 之后,该命令除了提供信息查询功能,还加入了在运行期修改部分参数值的能力(使用-flag[+/-]name 或 -flag name=value
在运行期修改一部分运行期可写的虚拟机参数值)。
命令格式
1 | $ jinfo [ option ] pid |
option
选项 | 作用 |
---|---|
-flag <name> |
打印虚拟机标记参数的值 |
-flag [+/-]<name> |
开启或关闭虚拟机标记参数 |
-flag <name>=<value> |
设置虚拟机标记参数 |
-flags | 输出虚拟机参数 |
-sysprops | 输出 Java 系统属性 |
<no option> |
输出以上所有 |
执行样例
-flag <name>
查询 CMSInitiatingOccupancyFraction 参数值
1 | $ jinfo -flag CMSInitiatingOccupancyFraction 5511 |
-flag [+/-]<name>
开启 / 关闭 PrintGC
1 | $ jinfo -flag PrintGC 5511 |
-flag <name>=<value>
设置 HeapDumpPath
1 | $ jinfo -flag HeapDumpPath 5511 |
但是不是每个参数都可以被动态修改的,比如:
1 | jinfo -flag CMSInitiatingOccupancyFraction=1 5511 |
-flags
输出虚拟机参数
1 | $ jinfo -flags |
-sysprops
输出 Java 系统属性
1 | $ jinfo -sysprops 5511 |
<no option>
输出以上所有
1 | $ jinfo 5511 |