前言
在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的内存,的确是很浪费的。