基于JVM的jinfo工具可以帮助我们在运行中的JVM进程中实时查看和修改指定Java进程的配置参数,以及输出JVM内部配置信息和线程堆栈信息等。
以下是使用jinfo的步骤:
步骤一:查看运行中的JVM进程
在使用jinfo工具前,需要先确认当前运行中的JVM进程PID。可以使用jps
命令查看,例如:
$ jps
2386 Bootstrap
2834 Jps
2898 MyApplication
可知当前运行了三个JVM进程,其中MyApplication的PID为2898。
步骤二:使用jinfo查看进程配置
使用jinfo查看进程配置的命令格式为:
jinfo <pid>
执行该命令后,会输出当前进程的JVM参数信息。例如:
$ jinfo 2898
Attaching to process ID 2898, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.11+9-LTS
Java System Properties:
...
java.version = 11.0.11
...
步骤三:使用jinfo修改进程配置
使用jinfo来修改进程的配置参数值的命令格式为:
jinfo -flag <name>[=<value>] <pid>
其中<name>
为要修改的参数名,<value>
为要修改的值,省略<value>
时则只查看该参数的当前值。例如:
$ jinfo -flag PrintGCDetails 2898
Attaching to process ID 2898, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.11+9-LTS
-XX:+PrintGCDetails
$ jinfo -flag PrintGCDetails=false 2898
Attaching to process ID 2898, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.11+9-LTS
执行上述命令后,可看到PrintGCDetails参数的值从true修改为了false。
示例一:开启JVM的G1垃圾回收器
在启动一个Java程序时,可以使用-XX:+UseG1GC
参数来开启JVM的G1垃圾回收器。但有时我们需要在程序运行的过程中动态修改垃圾回收器的类型以达到更好的性能。这时我们可以使用jinfo
命令来查看并修改垃圾回收器的配置参数,如下:
- 先执行
jps
命令查看Java进程的PID,假设为1234。 - 再执行
jinfo -flag UseG1GC=false 1234
命令将UseG1GC参数的值修改为false,暂时关闭G1垃圾回收器。 - 执行
jinfo -flag UseConcMarkSweepGC=true 1234
命令将UseConcMarkSweepGC参数的值修改为true,开启CMS垃圾回收器。
在实际应用中,可根据具体的业务场景来选择最适合当前环境的垃圾回收器类型。
示例二:查看线程堆栈信息
使用jinfo
命令还可以查看指定Java进程的线程信息和堆栈信息:
- 先执行
jps
命令查看Java进程的PID,假设为5678。 - 执行
jinfo -flags 5678
命令查看进程的运行参数。 - 执行
jinfo -sysprops 5678
命令查看进程的属性参数。 - 执行
jinfo -flag MaxHeapSize 5678
命令查看MaxHeapSize
参数的配置值。 - 执行
jinfo -threads 5678
命令查看当前所有线程的堆栈信息。
通过查看线程的堆栈信息,可以了解到当前进程的主要运行状态,从而方便开发人员进行调试和优化。
以上是使用jinfo的攻略,如有不理解的地方可以再问我。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于JVM-jinfo的使用方式 - Python技术站