-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Description
nacos从第一个版本发布以来,个人觉得在日志输出和启动脚本参数配置上有不少吐槽点,特别是日志输出部分,以下是个人罗列的,仅代表个人看法。
- 1、日志输出
nacos的日志输出非常之多,而且不支持在配置文件application.properties中做精细化的开关或者级别配置。唯一可以在应用配置文件中配置的是nacos.logs.path来配置日志输出路劲(但这个配置并不能完全限定所有日志),默认是获取nacos.home变量的路劲,并在路劲下创建logs文件夹来存储,而nacos.home是在startup.sh脚本中传入的,最终获取的是程序所在目录下。而早期版本甚至会在系统用户目录下创建logs和nacos两个目录来保存日志,1.1.0版本默认会在当前程序的根目录下创建logs来目录来保存日志。
其次,我配置了nacos.logs.path参数启动后,仍旧有日志会打印到${nacos.home}/logs目录下主要是cmdb-main.log,nacos_gc.log,start.out等。其次在linux用户根目录下还会创建一个nacos/logs的目录保存config.log以及naming.log日志。
而我们自定义的日志输出路劲日志也非常之多,特别是tomcat的web访问日志access_log,客户端越多日志越多,我写了10个客户端左右,不跑业务每天的日志量也是在80M到300M左右不等,建议在配置文件中默认false关闭。
另外,nacos的logback配置文件nacos-logback.xml中对各类日志的块大小分割保存并未设置压缩,当客户端太多的时候日志量非常之大,并且各个日志的分割标准也不相同,最大的2G分割,最小的20M分割。
- 2、
JVM内存大小
nacos的JVM参数大小是写死在了shell脚本中,而且集群情况下,为了避免频繁GC,设置的最小和最大内存为2G,相当于说只要启动一份nacos-server程序,就会占用掉2G的内存空间,即时可能它自身根本用不到(当然这里本人并未测试过nacos-server程序使用内存的需求量,大内存可以直接忽略),之前我使用eureka-server做注册中心时512M跑几十个客户端程序,没有任何问题。建议在application.properties中增加上调整JVM内存大小的参数。这样更方便配置修改,而不是直接修改shell脚本
- 3、
shutdown.sh脚本
默认的shutdown.sh脚本脚本在集群情况下执行会将同一台机子上的所有节点都关闭掉,因为shell命令查找的是有nacos.nacos标记的pid,当搭建伪集群的情况,这种情况就非常危险了。一旦执行脚本所有nacos节点全部关闭了。个人觉得即使不考虑采用伪集群方案,为了避免风险shutdown.sh脚本都应该默认关闭当前目录下的节点更为安全,例如将原脚本更改为
#!/bin/sh
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
BIN_DIR=$(cd `dirname $0`;pwd)
#获取项目根目录
DEPLOY_DIR=$(cd ${BIN_DIR};cd ..;pwd)
pid=`ps ax | grep -i $DEPLOY_DIR |grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No nacosServer running."
exit -1;
fi
echo "The nacosServer(${pid}) is running..."
kill ${pid}
echo "Send shutdown request to nacosServer(${pid}) OK"