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:代码段大小。