前言

在Spring Cloud项目中我们经常会用到Nacos,但如果只是在测试环境或者微服务数量相对比较少时,采用Nacos默认的JVM配置会浪费很多资源。特别是那些低配置用来研究的服务器。

无论是出于生产环境优化所需,还是出于测试环境不浪费资源所需,都需要对默认的JVM进行调整。

Nacos内存配置

Nacos是基于Spring Boot的项目,所使用的内存参数是在启动命令中进行配置的。而启动命令位于startup.sh(或.cmd)当中:


#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

fi

可以看出,如果是standalone模式启动,默认内存参数为“-Xms512m -Xmx512m -Xmn256m”,虽然不少,但还算可以。

但如果是其他模式启动,则内存直接分配2个G,可能根本用不到这么多,这个就有点坑了。

其中对应参数的含义:

  • -Xms: 设定程序启动时占用内存大小
  • -Xmx: 设定程序运行期间最大可占用的内存大小
  • -Xmn:新生代大小

为了避免频繁GC,设置的最小和最大内存为2G。因此,我们需要根据自己的业务情况,来进行占用内存的修改。

基于Docker的内存配置

如果是基于Docker进行服务启动的,也可以在脚本中进行调整:

version: '3'
services:
  nacos:
    image: nacos/nacos-server:latest                             # 镜像`nacos/nacos-server:latest`
    container_name: nacos_server                                 # 容器名为'nacos_server'
    restart: always                                              # 指定容器退出后的重启策略为始终重启
    volumes:                                                     # 数据卷挂载路径设置,将本机目录映射到容器目录
      - "/opt/nacous/nacos_docker/logs:/home/nacos/logs"
      - "/opt/nacous/nacos_docker/init.d/custom.properties:/home/nacos/init.d/custom.properties"
    environment:                        # 设置环境变量,相当于docker run命令中的-e
      - PREFER_HOST_MODE=hostname       # 是否支持hostname
      - MODE=standalone                           # 单机模式启动
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=127.0.0.1    # 注:这里不能为`127.0.0.1`或`localhost`方式!!!
      - MYSQL_SERVICE_DB_NAME=nacos_config        # 所需sql脚本位于 `nacos-mysql/nacos-mysql.sql`
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=123456
       # JVM调优参数
      - JVM_XMS=64m   #-Xms default :2g
      - JVM_XMX=64m   #-Xmx default :2g
      - JVM_XMN=16m   #-Xmn default :1g
      - JVM_MS=8m     #-XX:MetaspaceSize default :128m
      - JVM_MMS=8m    #-XX:MaxMetaspaceSize default :320m
      - NACOS_DEBUG=n #是否开启远程debug,y/n,默认n
      - TOMCAT_ACCESSLOG_ENABLED=false #是否开始tomcat访问日志的记录,默认false
    ports:                              # 映射端口
      - "8848:8848"
      - "9555:9555"
    # mem_limit: 300m   # 最大使用内存

小结

关于Nacos的内存调优本质上就是Spring Boot项目的内存调优,根据自己的业务所需,可以适当的进行参数大小的调整,并观察具体情况,根据业务变化进一步调整。在业务量比较小时,直接使用2G的内存,的确是很浪费的。


程序新视界

公众号“ 程序新视界”,一个让你软实力、硬技术同步提升的平台,提供海量资料

微信公众号:程序新视界

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐