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:MetaspaceSize | JVM方法区(元空间)大小设置 设置元空间初始大小 | 128M |
JVM_MMS | -XX:MaxMetaspaceSize | JVM方法区(元空间)大小设置 设置元空间大可分配大小 | 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不进行设置。