packet len* is out of range!

項(xiàng)目使用的是 dubbo 框架, 注冊(cè)中心使用的是 zookeeper。項(xiàng)目自發(fā)布以來(lái)平穩(wěn)迭代運(yùn)行了18個(gè)月,但在某個(gè)周五,正等待下班之際,突然傳出噩耗,app打開非??D且有大量報(bào)錯(cuò)。20分鐘之后,網(wǎng)關(guān)服務(wù)(consumer)宕機(jī)了。

網(wǎng)關(guān)服務(wù)器cpu爆了。
通過(guò) netstat -anp|grep port 查看發(fā)現(xiàn)有大量的 TIME_WAIT 的線程。

搜尋網(wǎng)關(guān)日志,重點(diǎn)發(fā)現(xiàn)有兩個(gè)報(bào)錯(cuò):

java.io.IOException: Packet len4235458 is out of range!
Background retry gave up
org.apache.curator.CuratorConnectionLossException: KeeperErrorCode = ConnectionLoss

上網(wǎng)搜了很多,都說(shuō)是要增加 jute.maxbuffe 參數(shù),通過(guò)本人親自驗(yàn)證,確實(shí)如此。

原因:

  • ZooKeeper為了提高讀的速度,把數(shù)據(jù)都加載到內(nèi)存中,讀取數(shù)據(jù)都是通過(guò)內(nèi)存。
    為了快速讀取和集群節(jié)點(diǎn)數(shù)據(jù)同步, ZNode的大小做了限制,默認(rèn)最大不能超過(guò)1M

解決辦法:

1、server端:修改 zkServer.sh 啟動(dòng)腳本文件,設(shè)置增加內(nèi)存 jute.maxbuffer10M ,重啟zk使配置生效:

此處修改能讓 zookeeper 每個(gè)節(jié)點(diǎn)接收最多10M 的服務(wù)注冊(cè)信息

2、client端:修改網(wǎng)關(guān)服務(wù)(consumer)啟動(dòng)腳本文件,增加參數(shù)
JAVA_OPTS=" -Djute.maxbuffer=10240000 [其他參數(shù)xxxxxxxx]"

此處修改能讓 consumer 接收最多接收10M 的服務(wù)注冊(cè)信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容