Skip to content

log of nacos optimization #1510

@Comven

Description

@Comven

nacos从第一个版本发布以来,个人觉得在日志输出和启动脚本参数配置上有不少吐槽点,特别是日志输出部分,以下是个人罗列的,仅代表个人看法。

  • 1、日志输出

nacos的日志输出非常之多,而且不支持在配置文件application.properties中做精细化的开关或者级别配置。唯一可以在应用配置文件中配置的是nacos.logs.path来配置日志输出路劲(但这个配置并不能完全限定所有日志),默认是获取nacos.home变量的路劲,并在路劲下创建logs文件夹来存储,而nacos.home是在startup.sh脚本中传入的,最终获取的是程序所在目录下。而早期版本甚至会在系统用户目录下创建logsnacos两个目录来保存日志,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日志。

而我们自定义的日志输出路劲日志也非常之多,特别是tomcatweb访问日志access_log,客户端越多日志越多,我写了10个客户端左右,不跑业务每天的日志量也是在80M300M左右不等,建议在配置文件中默认false关闭。

另外,nacoslogback配置文件nacos-logback.xml中对各类日志的块大小分割保存并未设置压缩,当客户端太多的时候日志量非常之大,并且各个日志的分割标准也不相同,最大的2G分割,最小的20M分割。

  • 2、JVM内存大小

nacosJVM参数大小是写死在了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"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions