JVM 参数分析

2019-09-29  本文已影响0人  星冉子

JVM参数分类

JVM参数分为标准参数和非标准参数

标准参数:"-"开头的参数,如-client等;

非标准参数:"-X"和"-XX"开头的参数,如-Xmx等;


或者简单分为三类:"-"开头的参数、"-X"开头的参数、"-XX"开头的参数

"-X"开头的参数是非标准参数,只能被部分VM识别,而不能被全部VM识别的参数;

"-XX"开头的参数是非稳定参数,随时可能被修改或者移除;


-XX参数的常见语法有:

-XX:+[PARAM], 开启该参数的功能,如-XX:+DisableExplicitGC,开启禁止显式GC

-XX:-[PARAM], 关闭该参数的功能,如-XX:-DisableExplicitGC,关闭禁止显示GC

-XX:PARAM=VALUE, 设置参数的值,如-XX:SurvivorRatio=80,设置eden/survivor的比值

常用标准参数

-agentlib:[=<选项>]:加载本地代理库,如-agentlib:hprof将加载hprof.dll或者hprof.so文件;

-agentpath:[=<选项>]:按完整路径名加载本机代理库;

-javaagent:[=<选项>]:加载 Java 编程语言代理,同agentlib和agentpath,只是前者是C/C++代理,而javaagent使用java语言编写的jar;

-classpath classpath:同-cp classpath,指定查找class的路径,多个路径window环境以分号分割,Linux以冒号分割;

-Dxx=value:设置系统参数,在代码中可以通过System.getProperty(xx)获取,如java -Denv=test Main.class;

-verbose:[class|gc|jni]  <pid>:打印虚拟机运行信息,可以在程序启动时,做为参数传入,也可做为命令行使用;

常用内存参数

-Xmx[value] :设置堆内存最大值,如-Xmx1g或者-Xmx1024m;默认为物理内存的“1/4”;

-Xms[value] :设置堆内存最小值,一般和Xmx设置成一样;默认为物理内存的“1/64”;

-Xmn[value] :设置新生代大小;

-Xss[value]:设置栈空间大小;

-XX:SurvivorRatio=[value]:设置新生代Eden和Survivor划分比例;

-XX:PermSize=[value] :设置永久带初始大小,JDK8中已移除;

-XX:MaxPermSize=[value] :设置永久代最大值。JDK8中已移除;

-XX:MetaspaceSize=[value] :设置meta区大小。JDK8增加;

-XX:NewRatio=2:新生代内存容量与老生代内存容量的比例;

常用调试参数

-XX:+PrintFlagsInitial:显示JVM所有可设置的参数及它们的初始值;

-XX:+PrintFlagsFinal:显示JVM所有可设置的参数及它们修改后的值,=表示未修改,:=表示修改;

-XX:ErrorFile=[path] :生成error 文件的路径,当JVM发生致命错误导致崩溃时,会生成包含了导致 JVM crash 的重要信息的文件用于定位;

-XX:+HeapDumpOnOutOfMemoryError :OOM的时候dump出内存;

-XX:HeapDumpPath:dump文件位置;

-XX:+PrintGC :打印GC详情;

-XX:+PrintGCDetails :打印GC更详细的信息;

-Xloggc:[path] :设置gc日志位置;

-XX:+PrintHeapAtGC 每次一次GC前后,都打印堆信息;

查看运行时参数

通过jps 命令查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;

jps:查看所有Java进程,显示进程id和启动类名称;

jps –l:显示进程id和启动类的全路径;

jps –m:显示进程id和传递给 Java 进程(main 方法)的参数;

jps –v:显示进程id和传递给 Java 虚拟机的参数;

通过jinfo命令查看JVM配置信息,包括命令行参数、系统变量,也可以用其来修改命令行参数;

Jinfo <pid>:查看进程所有虚拟机参数和系统参数;

Jinfo –flag <name> <pid>:查看进程指定参数,name指参数名称;

Jinfo -flag +<name><pid>:开启指定参数; (可使用jinfo动态设置GC参数无需重启

Jinfo -flag -<name><pid>:关闭指定参数;

Jinfo -flag <name>=<value> <pid>:设置虚拟机参数(并不是每个参数都可以被动态修改的,不支持会抛异常);

上一篇下一篇

猜你喜欢

热点阅读