Nacos 開源至今已有一年,在這一年裏,獲得了不少用戶的支持和反饋。在與社區的交流中,咱們發現有一些問題出現的頻率比較高,爲了可以讓用戶更快的解決問題,咱們總結了這篇常見問題及解決方法,這篇文章後續也會合併到 Nacos 官網的 FAQ 裏。git
不少用戶都是經過 Spring Cloud Alibaba 或者 Dubbo 依賴的 Nacos 客戶端,那麼 Spring Cloud Alibaba 和 Dubbo 中依賴的 Nacos 客戶端版本,每每會落後於 Nacos 最新發布的版本。在一些狀況下,用戶須要強制將 Nacos 客戶端升級到最新,此時卻每每不知道該升級哪一個依賴,這裏將 Spring Cloud Alibaba 和 Dubbo 的依賴升級說明以下:github
用戶一般是配置如下Maven依賴來使用的 Nacos:spring
<!--Nacos Discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>[latest version]</version>
</dependency>
<!--Nacos Config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>[latest version]</version>
</dependency>複製代碼
這兩個 JAR 包實際上又依賴瞭如下的 JAR 包:tomcat
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>[a particular version]</version>
</dependency>複製代碼
若是 nacos-client 升級了,對應的 spring-cloud 客戶端版本不必定也同步升級,這個時候能夠採用以下的方式強制升級 nacos-client(以 nacos-discovery 爲例):bash
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>[latest version]</version>
<excludes>
<exclude>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclude>
</excludes>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>[latest version]</version>
</dependency>複製代碼
Dubbo 也是相似的道理,用戶一般引入的是如下的依賴:框架
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>[latest version]</version>
</dependency>
<!-- Dubbo dependency -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>[latest version]</version>
</dependency>複製代碼
須要升級 Nacos 客戶端時,只須要以下修改依賴:curl
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>[latest version]</version>
</dependency>複製代碼
問題的現象是依賴 Nacos 客戶端的應用,在運行一段時間後出現 CPU 佔用率高,內存佔用高甚至內存溢出的現象,能夠參考 Issue優化
這種狀況首先要作的是分析 CPU 高或者內存佔用高的緣由,經常使用的命令有 top、jstack、jmap、jhat 等。其中一種狀況是 Nacos 客戶端實例在 Spring Cloud Alibaba 服務框架中被反覆構造了屢次,能夠參考 Issueurl
這個問題已經獲得了修復,預期會在下個 Spring Cloud Alibaba 版本中發佈。spa
在老的 Nacos 版本中,每每會有大量的無效日誌打印,這些日誌的打印會迅速佔用完用戶的磁盤空間,同時也讓有效日誌難以查找。目前社區反饋的日誌頻繁打印主要有如下幾種狀況:
一、access 日誌大量打印,相關 Issue 點擊這裏。
主要表現是 {nacos.home}/logs/access_log.2019-xx-xx.log 相似格式文件名的日誌大量打印,並且還不能自動清理和滾動。這個日誌是 Spring Boot 提供的 Tomcat 訪問日誌打印,Spring Boot 在關於該日誌的選項中,沒有最大保留天數或者日誌大小控制的選項。所以這個日誌的清理必須由應用新建 Crontab 任務來完成,或者經過如下命令關閉日誌的輸出(在生產環境咱們仍是建議開啓該日誌,以便可以有第一現場的訪問記錄):
server.tomcat.accesslog.enabled=false複製代碼
二、服務端業務日誌大量打印且沒法動態調整日誌級別。這個問題在 1.1.3 已經獲得優化,能夠經過 API 的方式來進行日誌級別的調整,調整日誌級別的方式以下:
# 調整naming模塊的naming-raft.log的級別爲error:
curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/log?logName=naming-raft&logLevel=error'
# 調整config模塊的config-dump.log的級別爲warn:
curl -X PUT '$nacos_server:8848/nacos/v1/cs/ops/log?logName=config-dump&logLevel=warn'複製代碼
三、客戶端日誌大量打印,主要有心跳日誌、輪詢日誌等。這個問題已經在 1.1.3 解決,請升級到 1.1.3 版本。
在 Nacos 1.0.1 版本中,Nacos 控制檯支持了顯示當前的集羣各個機器的狀態信息。這個功能受到比較多用戶的關注,其中一個被反饋的問題是列表中每一個節點的集羣任期不同。以下圖所示,圖片信息來自 Issue
對於這個任期不一致的問題,緣由主要是由於獲取這個信息的邏輯有一些問題,沒有從對應的節點上獲取集羣任期。這個問題會在下一個 Nacos 版本中修復。目前一個手動檢查集羣任期的辦法是在每一個節點上執行如下命令:
curl '127.0.0.1:8848/nacos/v1/ns/raft/state'複製代碼
而後在返回信息中查找本節點的集羣任期。由於每一個節點返回的集羣任期中,只有當前節點的信息是準確的,返回的其餘節點的信息都是不許確的。
本文爲雲棲社區原創內容,未經容許不得轉載。