JVM参数调优
前言
你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值
使用jps和jinfo进行查看
-Xms:初始堆空间
-Xmx:堆最大值
-Xss:栈空间
-Xms 和 -Xmx最好调整一致,防止JVM频繁进行收集和回收
JVM参数类型
- 标配参数(从JDK1.0 - Java12都在,很稳定)
- -version
- -help
- java -showversion
- X参数(了解)
- -Xint:解释执行
- -Xcomp:第一次使用就编译成本地代码
- -Xmixed:混合模式
- XX参数(重点)
- Boolean类型
- 公式:-XX:+ 或者-某个属性 + 表示开启,-表示关闭
- Case:-XX:-PrintGCDetails:表示关闭了GC详情输出
- key-value类型
- 公式:-XX:属性key=属性value
- 不满意初始值,可以通过下列命令调整
- case:如何:-XX:MetaspaceSize=21807104:查看Java元空间的值
- Boolean类型
查看运行的Java程序,JVM参数是否开启,具体值为多少?
首先我们运行一个HelloGC的java程序
public class HelloGC {
public static void main(String[] args) throws InterruptedException {
System.out.println("hello GC");
Thread.sleep(Integer.MAX_VALUE);
}
}
然后使用下列命令查看它的默认参数
jps:查看java的后台进程
jinfo:查看正在运行的java程序
具体使用:
jps -l得到进程号
12608 com.moxi.interview.study.GC.HelloGC
15200 sun.tools.jps.Jps
15296 org.jetbrains.idea.maven.server.RemoteMavenServer36
4528
12216 org.jetbrains.jps.cmdline.Launcher
9772 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
查看到HelloGC的进程号为:12608
我们使用jinfo -flag 然后查看是否开启PrintGCDetails这个参数
jinfo -flag PrintGCDetails 12608
得到的内容为
-XX:-PrintGCDetails
上面提到了,-号表示关闭,即没有开启PrintGCDetails这个参数
下面我们需要在启动HelloGC的时候,增加 PrintGCDetails这个参数,需要在运行程序的时候配置JVM参数
然后在VM Options中加入下面的代码,现在+号表示开启
-XX:+PrintGCDetails
然后在使用jinfo查看我们的配置
jps -l
jinfo -flag PrintGCDetails 13540
得到的结果为
-XX:+PrintGCDetails
我们看到原来的-号变成了+号,说明我们通过 VM Options配置的JVM参数已经生效了
使用下列命令,会把jvm的全部默认参数输出
jinfo -flags ***
题外话(坑题)
两个经典参数:-Xms 和 -Xmx,这两个参数 如何解释
这两个参数,还是属于XX参数,因为取了别名
- -Xms 等价于 -XX:InitialHeapSize :初始化堆内存(默认只会用最大物理内存的64分1)
- -Xmx 等价于 -XX:MaxHeapSize :最大堆内存(默认只会用最大物理内存的4分1)
查看JVM默认参数
-
-XX:+