
jvm常用启动参数
-D参数
java -Dk=v Demo01Application
设置JVM系统参数,在代码里可以用System.getProperty("k")获取
public class Demo01Application {
public static void main(String[] args) {
String v = System.getProperty("k");
System.out.println(v);
}
}
-classpath或-cp
JVM默认使用环境变量CLASS_PATH设置的路径加载类库,如果设置了-cp,则覆盖CLASS_PATH的设置
-server
JVM可以指定使用server或client模式启动
# 以server模式启动
java -server xxx
# 以client模式启动
java -client xxx
server模式启动时,启动过程比client慢,但是启动后性能比client好
-client
已client模式启动
-XX:-OmitStackTraceInFastThrow
jdk5开始,-server模式下,默认开启省略异常栈快速输出,当同样的异常抛出次数达到一定数量时,输出的异常信息就会省略栈的信息
使用 -XX:-OmitStackTraceInFastThrow 可以关闭这个配置
JVM也只对部分异常做了Fast Throw
NullPointerException
ArithmeticException
ArrayIndexOutOfBoundsException
ArrayStoreException
ClassCastException
-XX:+HeapDumpOnOutOfMemoryError
当出现栈溢出时,自动将栈信息dump出来,配合 -XX:HeapDumpPath ,自定义指定dump出来的文件存放位置
-XX:HeapDumpPath
设置栈信息dump出来后的存储位置
-XX:-UseLargePages
参考:https://www.bbsmax.com/A/o75N2GpW5W/
设置JVM使用大内存页,适合需要使用大内存栈的应用
需要操作系统也配置huge page,查看当前系统配置的 huge page
grep Huge /proc/meminfo
-----------------------------------
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugepagesize 表示系统一个大内存页是 2M
-verbose:gc
在控制台输出GC信息
-XX:+PrintGCDetails
输出详细的GC信息
-XX:+PrintGCDateStamps
输出GC的日期时间戳
-XX:+PrintGCTimeStamps
输出GC的时间的时间戳
-XX:+UseGCLogFileRotation
启用GC日志切割
-XX:NumberOfGCLogFiles
设置GC日志切割的文件最大保留个数
# 可以保留10个日志文件
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize
设置每个GC日志文件最大大小
# 设置文件大小50M
-XX:GCLogFileSize=50M
-XX:+HeapDumpOnOutOfMemoryError
OOM时自动dump内存快照
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
自动dump的快照保存位置
-XX:HeapDumpPath=/usr/local/app/oom.hprof
-XX:+UseParallelGC
使用 Parallel Scavenge + Serial Old 作为垃圾回收
java 9之前版本,在 -server 模式下,默认开启这个参数
-XX:+UseParallelOldGC
使用 Parallel Scavenge + Parallel Old 作为垃圾回收
java1.8,默认使用这个垃圾回收组合
-XX:+UseG1GC
指定使用G1垃圾回收器,配合-XX:MaxGCPauseMillis指定GC导致的STW最大停顿时间
-XX:MaxGCPauseMillis
设置GC最大STW停顿时间
-Xloggc
设置GC日志输出位置
-Xloggc:/data/logs/app_gc.log
-Xlog:gc*
jdk9以上设置GC日志输出配置
jdk版本小于9时的配置
java -Xloggc:/data/logs/app_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=50M -jar test.jar
版本大于等于9时可以这么配置
# filesize=51200,表示50m
java -Xlog:gc*:file=/data/logs/app_gc.log:time,tags:filecount=10:filesize=51200