跳转到主要内容

jvm常见参数

四个重要参数 -Xms、-Xmx、GC算法、-XX:MaxMetaspaceSize

使用环境变量设置


JAVA_TOOL_OPTIONS="-Xms3g -Xmx3g -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC"

# -Xms 初始化堆大小
# -Xmx 最大堆大小
# -Xss 每个线程的栈大小(可以不设置)

# -Xms和-Xmx应该设置为一样的值,如果没有设置,默认值为物理内存的1/4

# -XX:+UseG1GC GC算法,小于32G内存
# -XX:+UseZGC  GC算法,大于32G内存

在java -jar 命令中设置


java -Xms3g -Xmx3g -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -jar app.jar

参数参考

计算可分配内存大小:

  • 物理内存的75%
  • 总的物理内存 减 操作系统需要的(8G),在除以实例数,就是每个实例可以分配的内存

Xms和Xmx应该设置成一样的,避免反复GC,如果没有设置,默认值为物理内存的1/4

-XX:MaxMetaspaceSize , 元数据空间存放的是类的结构信息、方法的字节码、常量池、注解、泛型信息等。意思是动态加载的反射、代理、AOP等都会缓存下来。他的作用是放置加载过多的类把内存用尽了。数值选择是-Xmx的10%。也可以直接使用最大值2G,元数据空间不可能大于2G

GC算法:
-XX:+UseG1GC    // ≤32 g 堆
-XX:+UseZGC     // >32 g 或低延迟场景

查看内存使用情况


ps -p 24053 -o pid,vsz,rss,comm

# <PID>:替换为你要查看的进程 ID。
# vsz:虚拟内存大小(单位:KB)。
# rss:实际占用的物理内存(单位:KB)。
# comm:进程名。


cat /proc/24053/status |grep -i vm

# VmSize:虚拟内存总量(KB)。
# VmRSS:实际使用的物理内存(KB)。
# VmData:数据段大小。
# VmStk:栈大小。
# VmExe:代码段大小。