进行JVM调优的第一步是查询JVM使用的参数。怎么查询JVM的参数呢?
我们可以分为程序没有启动和程序已经启动两种情况来看。
程序没有启动的情况
首先我们先写一个最简单的Hello World程序,程序代码如下。
public class ShowJVMOptions {public static void main(String[] args) {System.out.println("hello world");}}
然后使用
Java ShowJVMOptions.java
进行编译,得到ShowJVMOptions.class 文件。
下面就可以指定打印JVM参数来进行启动了。
打印显式参数 -XX:+PrintVMOptions
java -XX:+PrintVMOptions ShowJVMOptions
执行输出
VM option '+PrintVMOptions'hello world
打印显式隐式参数 -XX:+PrintCommandLineFlags
java -XX:+PrintCommandLineFlags ShowJVMOptions
执行输出
-XX:InitialHeapSize=525316096 -XX:MaxHeapSize=8405057536 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGChello world
打印所有系统参数 -XX:+PrintFlagsFinal
java -XX:+PrintFlagsFinal ShowJVMOptions > jvm_flag_final.txt
这样做会把所有的JVM参数都输出到jvm_flag_final.txt文件中去,总共有
728/2=364条。

程序已经启动的情况
如果程序已经启动,那就不能再加打印参数了,这时应该怎么做呢?
首先可以使用jps命令来打印出目前运行的JVM虚拟机进程。在机器上运行jps,输出如下:

可以看到有一个Kafka的java进程,pid是250254,下面就来分析这个进程。
想要看到这个进程的JVM参数,可以使用jinfo命令。这个命令专门用来输出JVM参数信息。不仅可以输出本机的,还可以输出远程机器和core文件的JVM信息。
先看一下jinfo的用法:

使用 jinfo -flags pid 来看一下看Kafka进程的JVM参数。

图中红框的部分是Kafka GC文件所在的位置。如果出现了GC问题,首先要找到GC文件,然后根据文件输出进行分析。
文章转载自码上记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




