解決Dubbo應(yīng)用啟動注冊ZK獲取IP慢的原因之一
Dubbo應(yīng)用啟動注冊ZK獲取IP慢的原因之一
突然有一天,我的idea啟動應(yīng)用慢了,要3分鐘才能啟動完畢。
主要看到的log中有
No valid ip found from environment, try to find valid host from DNS.
看了一下是主要是dubbo注冊的時候慢,我一度以為公司的對我的ip有做限制了,因?yàn)槠渌藛佑趾芸臁?/p>
1:第一次思路是我自己下載了zk運(yùn)行起來注冊到本地來看看,也是照樣慢。
2:idea慢,我設(shè)置了idea的啟動最大內(nèi)存為2G,這之前我沒設(shè)置過,后發(fā)現(xiàn)也無效。
3:我一度以為我的IP vpn做了轉(zhuǎn)發(fā)引起的,或者電腦安裝了什么軟件導(dǎo)致慢了。最后發(fā)現(xiàn)也不是。
[TID: N/A|] o.a.d.r.z.ZookeeperRegistry : [DUBBO] Register: dubbo://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?application=mydemo-server&deprecated=false&dubbo=2.0.2&release=2.7.4.1&timeout=60000×tamp=1628244643743, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:43.983 INFO [ main]
[TID: N/A|] o.a.d.r.z.ZookeeperRegistry : [DUBBO] Subscribe: provider://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade&bind.ip=127.0.0.1&bind.port=20880&category=configurators&check=false&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.server.sys.XxxFacade&methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000×tamp=1628244643743, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.098 INFO [ main]
[TID: N/A|] o.a.d.r.z.ZookeeperRegistry : [DUBBO] Notify urls for subscribe url provider://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade&bind.ip=127.0.0.1&bind.port=20880&category=configurators&check=false&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.server.sys.XxxFacade&methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000×tamp=1628244643743, urls: [override://10.216.7.243:20880/com.xxx.api.server.sys.XxxFacade?category=configurators&disabled=true&dynamic=false&enabled=true], dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.099 INFO [ main]
[TID: N/A|] o.a.d.c.AbstractConfig : [DUBBO] The service ready on spring started. service: com.xxx.api.facade.DailyFacade, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.099 INFO [Report-thread-1]
[TID: N/A|] o.a.d.m.s.z.ZookeeperMetadataReport : [DUBBO] store provider metadata. Identifier : org.apache.dubbo.metadata.identifier.MetadataIdentifier@3e661e1b; definition: FullServiceDefinition{parameters={side=provider, release=2.7.4.1, methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg, deprecated=false, dubbo=2.0.2, interface=com.xxx.api.server.sys.XxxFacade, qos.enable=false, timeout=60000, generic=false, delay=0, application=mydemo-server, dynamic=true, bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade, anyhost=true}} ServiceDefinition [canonicalName=com.xxx.api.server.sys.XxxFacade, codeSource=file:/Users/cookie.joo/IdeaProjects/mydemo/mydemo-api/target/classes/, methods=[MethodDefinition [name=listNewOrganizations, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult], MethodDefinition [name=listTreeCmdbOrg, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult], MethodDefinition [name=listTCOrg, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult]]], dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.108 INFO [ main]
[TID: N/A|] o.a.d.c.AbstractConfig : [DUBBO] No valid ip found from environment, try to find valid host from DNS., dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169 INFO [ main]
[TID: N/A|] o.a.d.c.AbstractConfig : [DUBBO] Export dubbo service com.xxx.api.facade.DailyFacade to local registry url : injvm://127.0.0.1/com.xxx.api.facade.DailyFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.facade.DailyFacade&bind.ip=127.0.0.1&bind.port=20880&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.facade.DailyFacade&methods=jiraRequestCheck,checkRdRequest,jiraSearch,remind&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000×tamp=1628244644105, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169 INFO [ main]
[TID: N/A|] o.a.d.c.AbstractConfig : [DUBBO] There's no valid monitor config found, if you want to open monitor statistics for Dubbo, please make sure your monitor is configured properly., dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169 INFO [ main]
我繼續(xù)看日志中的類
主要是很多次 [DUBBO] Register: 出現(xiàn)這一句的時候會卡一下
繼續(xù)出現(xiàn)下一個接口注冊又卡一下,我大概已經(jīng)猜測就是ip尋址的問題了
最后我從代碼中看到了org.apache.dubbo.common.utils.NetUtils#getLocalHost這個方法
斷點(diǎn)后確實(shí)是這個方法有點(diǎn)卡頓,差不多幾秒才有反應(yīng)的。

我搜了一些文章確實(shí)是反應(yīng)了這個getHostAddress的問題,要設(shè)置hostname和127.0.0.1的映射關(guān)系
我就設(shè)置了hosts,然后啟動確實(shí)好了,恢復(fù)到幾十秒內(nèi)啟動完畢。(hostname是機(jī)器名)

其中的問題是getHostAddress是使用native本地方法來獲取的,如果沒有配置好映射會出現(xiàn)調(diào)用方法卡頓的問題。
class Inet4AddressImpl implements InetAddressImpl {
public native String getLocalHostName() throws UnknownHostException;如果啟動項(xiàng)目要這么久,開發(fā)代碼到測試階段一定會很痛苦,這個問題不解決,以后工作效率肯定會奔潰。
注意:
注冊接口到zk時打印日志會有個空隙,并不是平滑的日志打印那種感覺,這就是問題的現(xiàn)象。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 發(fā)送http請求上傳文件功能實(shí)例
本文通過實(shí)例代碼給大家介紹了Java 發(fā)送http請求上傳文件功能,需要的朋友參考下吧2017-06-06
spring如何實(shí)現(xiàn)依賴注入DI(spring-test方式)
本文主要介紹如何實(shí)現(xiàn)spring 的依賴注入,并且淺顯的講述一下注入需要注意的事項(xiàng)。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot?自定義啟動器的實(shí)現(xiàn)
本文主要介紹了springboot?自定義啟動器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
菜鳥學(xué)習(xí)java設(shè)計(jì)模式之單例模式
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之單例模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java開發(fā)學(xué)習(xí)之Bean的作用域和生命周期詳解
這篇文章主要介紹了淺談Spring中Bean的作用域,生命周期和注解,從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個過程就是一個生命周期。本文將通過示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下2022-06-06
Java中的logback標(biāo)記日志過濾器MarkerFilter詳解
這篇文章主要介紹了Java中的logback標(biāo)記日志過濾器MarkerFilter詳解,在logback-classic中存在一個全局過濾器TurboFilter,TurboFilter是與LoggerContext綁定,會在會在其它過濾器之前執(zhí)行,需要的朋友可以參考下2023-11-11
Java使用for循環(huán)解決經(jīng)典的雞兔同籠問題示例
這篇文章主要介紹了Java使用for循環(huán)解決經(jīng)典的雞兔同籠問題,結(jié)合實(shí)例形式分析了Java巧妙使用流程控制語句for循環(huán)解決雞兔同籠問題相關(guān)操作技巧,需要的朋友可以參考下2018-05-05

