公司項目重構,把dubbo版本從2.5.8升級為2.6.2。升級后在本地運行一點問題都沒有;可是通過公司自研的發布系統將項目發布到測試環境的linux服務器下面后,出現了dubbo服務未注冊的現象。剛出現這問題,大家都一臉懵逼,畢竟在本地跑起來非常順暢。但問題總是要解決的,不可能因為dubbo服務注冊異常就不升級dubbo版本。因此記錄下這個問題是怎么解決的,便於后續查閱。
一、問題描述
dubbo版本從2.5.8升級到2.6.2后,在linux服務器上運行項目。查詢dubbo監控中心,發現一個dubbo服務都沒注冊成功;並且項目啟動過程中沒有報錯。在windows本地運行項目則不會有任何問題,服務都注冊上了。
二、解決過程
(1)dump jvm線程棧
因為是在linux服務器上出現了問題,因此我們需要dump jvm 線程棧
- 先查詢出我們運行的項目的進程id
-
ps -ef | grep 項目名
-
-
dump 線程棧信息
-
jstack 進程id > zxy_thred_dump.txt
-
分析dump文件,發現了異常的線程。信息如下圖所示

發現異常出現在dubbo包下的 NetUtils.getLocalAddress0()這個方法上面
(3)在網絡上查詢這個異常信息,得到如下結果
ip解析異常導致dubbo服務注冊異常

(4)查看服務器上hostname和ip綁定情況
查看hostname命令: hostname
查看hostname綁定的ip的命令: hostname -i

查看
hosts文件:cat /etc/hosts

發現果然是hosts的問題,hostname 是kxlsv178;但hosts里面ip和hostname綁定沒有綁定。
三、解決方案
直接修改hosts文件,添加hostname和ip
vim /etc/hosts

四、參考鏈接
(1)https://www.cnblogs.com/leo-li-3046/p/5702479.html
(2)https://www.cnblogs.com/jizhao/p/4081675.html
(3)https://blog.csdn.net/qianghaohao/article/details/80379118
(4)https://blog.csdn.net/perfect5085/article/details/7283067