nacos启动jvm参数调整解决内存占用过多问题

JVM初始分配的内存,由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆,直到-Xmx的最大限制空余堆内存大于70%时,JVM会减少堆,直到-Xms的最小限制因此服务器一般设置-Xms与-Xmx相等,以避免在每次GC 后调整堆的大小

参数俗称描述默认值
JVM_XMS-Xms为jvm启动时分配的内存
比如-Xms200m,表示分配200M
(Xms分配堆最小内存,默认为物理内存的1/64)
此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
2G
JVM_XMX-Xmx为jvm运行过程中分配的最大内存
比如-Xms500m,表示jvm进程最多只能够占用500M内存
(Xmx分配最大内存,默认为物理内存的1/4)
2G
JVM_XMN-Xmn设置年轻代大小
-XX:NewSize=n:设置年轻代大小(Xmn)
整个堆大小=年轻代大小 + 年老代大小 + 常量池。
持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
1G
JVM_MS-XX:MetaspaceSizeJVM方法区(元空间)大小设置
设置元空间初始大小
128M
JVM_MMS-XX:MaxMetaspaceSizeJVM方法区(元空间)大小设置
设置元空间大可分配大小
320M

JVM方法区(元空间)大小设置(-XX:MetaspaceSize和-XX:MaxMetaspaceSize)

JDK8及以后:可以使用-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置元空间初始大小以及最大可分配大小。

例子:设置初始大小是100M,最大可分配空间也是100M。-XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=100m。

  • 1.如果不指定元空间的大小,默认情况下,元空间最大的大小是系统内存的大小,元空间一直扩大,虚拟机可能会消耗完所有的可用系统内存。
  • 2.如果元空间内存不够用,就会报OOM。
  • 3.默认情况下,对应一个64位的服务端JVM来说,其默认的-XX:MetaspaceSize值为21MB,这就是初始的高水位线,一旦元空间的大小触及这个高水位线,就会触发Full GC并会卸载没有用的类,然后高水位线的值将会被重置。
  • 4.从第3点可以知道,如果初始化的高水位线设置过低,会频繁的触发Full GC,高水位线会被多次调整。所以为了避免频繁GC以及调整高水位线,建议将-XX:MetaspaceSize设置为较高的值,而-XX:MaxMetaspaceSize不进行设置。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐