1. 程式人生 > >客戶端程序調用zookeeper報len4807928異常

客戶端程序調用zookeeper報len4807928異常

zookeepe acf 啟動 conf 自身 image java_home -o cto

一、故障分析與解決
1.dubbo-zookeeper註冊中心數據量太大.導致客戶端與其通信失敗
異常現象圖:

技術分享圖片

2.異常分析
znode節點上的數據太大,超過長度,程序處理失敗
3.解決方法
在zookeeper客戶端程序啟動start.sh中加入"-Djute.maxbuffer=10240000"增加它的最大容量
參數位置:JAVA_MEM_OPTS="-Djute.maxbuffer=10240000"
加入之後啟動java程序,觀察日誌.無之前異常

二、zookeeper優化說明-設置zookeeper啟動內存大小

1.編輯zookeeper/bin/zkEnv.sh配置文件

技術分享圖片

該文件已經明確說明有獨立JVM內存的設置文件,路徑是zookeeper/conf/Java.env,安裝的時候這個路徑下沒有有java.env配置文件.需新建
#命令:
cat >>conf/java.env<<EOF
#!/bin/sh
export JAVA_HOME=/usr/java/jdk
# heap size MUST be modified according to cluster environment
# 默認2g,根據機器自身內存大小設置,註意事項下面說明
export JVMFLAGS="-Xms4g -Xmx4g"
EOF
2.堆區參數配置說明
1.-Xms :表示java虛擬機堆區內存初始內存分配的大小,通常為操作系統可用內存的1/64大小即可,但仍需按照實際情況進行分配。有可能真的按照這樣的一個規則分配時,設計出的軟件還沒有能夠運行得起來就掛了。
2.-Xmx: 表示java虛擬機堆區內存可被分配的最大上限,通常為操作系統可用內存的1/4大小。但是開發過程中,通常會將 -Xms 與 -Xmx兩個參數的配置相同的值,其目的是為了能夠在java垃圾回收機制清理完堆區後不需要重新分隔計算堆區的大小而浪費資源。 一般來講對於堆區的內存分配只需要對上述兩個參數進行合理配置即可。

註:    
在配置之前一定要慎重的考慮一下自身軟件所需要的非堆區內存大小,因為此處內存是不會被java垃圾回收機制進行處理的地方。並且更加要註意的是 最大堆內存與最大非堆內存的和絕對不能夠超出操作系統的可用內存。

客戶端程序調用zookeeper報len4807928異常