dubbo線(xiàn)程池資源耗盡的分析

二月份的工作總結(jié),分享一下胯盯。
近期我們線(xiàn)上A網(wǎng)站爬取效率不高懈费,時(shí)間比較長(zhǎng)计露,由于元旦時(shí)可以達(dá)到30w+一天,故排查重點(diǎn)還是流程以及dubbo線(xiàn)程池問(wèn)題憎乙。
1票罐、dubbo線(xiàn)程池發(fā)生:RejectedExecutionException: Thread pool is EXHAUSTED!異常時(shí),使用jstat查看jvm使用情況泞边,GCT的時(shí)間在2-3之間该押,不算太高。
2阵谚、使用jstack查看堆棧信息蚕礼,發(fā)現(xiàn)大量java.lang.Thread.State: RUNNABLE烟具,沒(méi)有死鎖發(fā)生。對(duì)比A網(wǎng)站和B網(wǎng)站的堆棧信息奠蹬,A網(wǎng)站java.lang.Thread.State: RUNNABLE比例大概是85%以上朝聋,其余是TIMED_WAITING和WAITING;而B(niǎo)網(wǎng)站java.lang.Thread.State: RUNNABLE比例大概是10%~20%囤躁,其余是TIMED_WAITING和WAITING冀痕。(事后分析,這里已經(jīng)有問(wèn)題了狸演,大部分的任務(wù)都是RUNNABLE應(yīng)該是存在問(wèn)題的)
3言蛇、網(wǎng)上查找關(guān)于查看dubbo線(xiàn)程池方法。
發(fā)現(xiàn)可以使用telnet命令來(lái)查看dubbo線(xiàn)程池(http://alibaba.github.io/dubbo-doc-static/Telnet+Command+Reference-zh-showComments=true&showCommentArea=true.htm
如圖所示:

dubbo線(xiàn)程池資源耗盡的分析 - 在路上的小海賊 - 笑傲江湖

可以查看線(xiàn)程池的健康程度宵距、最大線(xiàn)程數(shù)腊尚、活躍線(xiàn)程數(shù)、任務(wù)數(shù)等等消玄。
發(fā)現(xiàn)當(dāng)A網(wǎng)站的線(xiàn)程池active是一直波浪增長(zhǎng)的,直至達(dá)到max翩瓜,即線(xiàn)程池滿(mǎn)了受扳。但查看爬蟲(chóng)自服務(wù)、B網(wǎng)站等兔跌,active數(shù)基本都是1,會(huì)增長(zhǎng)也會(huì)落下來(lái)华望。
至此,基本上可以判斷A網(wǎng)站效率問(wèn)題是由于某種原因?qū)е禄钴S線(xiàn)程數(shù)無(wú)法釋放,導(dǎo)致最終線(xiàn)程池卡死石洗。
4紧显、由于A網(wǎng)站爬蟲(chóng)有四個(gè)定時(shí)器啟動(dòng)涉兽,分別是a功能、b功能丹允、c功能、d功能,所以分開(kāi)試驗(yàn)前塔,只啟動(dòng)單個(gè)定時(shí)器华弓,看active數(shù)據(jù)是否增長(zhǎng)。
a吱抚、啟動(dòng)a功能定時(shí)器昌粤,不增長(zhǎng)鸵膏;
b膊升、啟動(dòng)b功能定時(shí)器,緩慢增長(zhǎng)非区;
c征绸、啟動(dòng)c功能定時(shí)器,增長(zhǎng)較快祝拯;
d佳头、啟動(dòng)d功能定時(shí)器凄鼻,不增長(zhǎng)膘格。
對(duì)比代碼纱控,發(fā)現(xiàn)b、c中均包含httpClient調(diào)用,問(wèn)題出在httpClient調(diào)用鲫售。
5、由于B網(wǎng)站也使用了httpClient調(diào)用匀哄,但并沒(méi)有出現(xiàn)問(wèn)題贡耽,故需要測(cè)試使用代理IP和不使用代理IP兩種蒲赂。
寫(xiě)測(cè)試代碼測(cè)試httpClient調(diào)用時(shí)使用代理IP與不使用代理IP,發(fā)現(xiàn)訪(fǎng)問(wèn)B網(wǎng)站、百度等網(wǎng)站,不使用代理IP卧土,active不增長(zhǎng);使用代理IP訪(fǎng)問(wèn)裁判文書(shū)則active增長(zhǎng)媳谁。懷疑httpClient有些操作導(dǎo)致了線(xiàn)程池資源耗盡。(事后發(fā)現(xiàn)此處可以不測(cè)試鸭叙,因?yàn)锳網(wǎng)站與B網(wǎng)站除了使用與與不使用代理IP外沈贝,最大的區(qū)別是B網(wǎng)站幾乎不超時(shí),而A網(wǎng)站大概率超時(shí))
6罩引、網(wǎng)上查找原因徙融,看了http://blog.csdn.net/clementad/article/details/75649625 這篇文章后發(fā)現(xiàn)httpClient的超時(shí)設(shè)置少了一個(gè),應(yīng)該增加如下所示:

dubbo線(xiàn)程池資源耗盡的分析 - 在路上的小海賊 - 笑傲江湖

運(yùn)行代碼后發(fā)現(xiàn)索然active還是有些增長(zhǎng),但明顯慢了很多龙助,在家里運(yùn)行了將近3個(gè)小時(shí)胸哥,從最開(kāi)始漲到了50左右,然后基本穩(wěn)定
7赋朦、我一個(gè)同事后來(lái)發(fā)現(xiàn)timeout時(shí)間設(shè)置沒(méi)有生效宠哄,在httpClient.execute()之前纹因,需要設(shè)置配置生效,httpget.setConfig(requestConfig);這樣設(shè)置后琳拨,運(yùn)行一晚上瞭恰,active數(shù)穩(wěn)定在20左右。后來(lái)發(fā)現(xiàn)是由于setDefaultRequestConfig兩次狱庇,第二次set時(shí)可能是沖掉了第一次的timeout設(shè)置惊畏。之所以配置clientBuilder.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(30000).build()); 也能夠達(dá)到效果鹊奖,但效果不如使用httpget.setConfig(requestConfig);設(shè)置效果明顯司训,是因?yàn)榍罢呦喈?dāng)于給httpClient設(shè)置了一個(gè)超時(shí)時(shí)間的設(shè)置,會(huì)起效果走贪,但也只是給響應(yīng)設(shè)置了超時(shí)時(shí)間浪讳,而缺少下面三個(gè)配置缰盏,則效果不夠理想

//客戶(hù)端和服務(wù)器建立連接的timeout
requestConfigBuilder.setConnectTimeout(30000);
//從連接池獲取連接的timeout
requestConfigBuilder.setConnectionRequestTimeout(30000);
//連接建立后,request沒(méi)有回應(yīng)的timeout
requestConfigBuilder.setSocketTimeout(30000);
8淹遵、測(cè)試環(huán)境和最終的線(xiàn)上環(huán)境口猜,同時(shí)配置了四個(gè)超時(shí)時(shí)間且都是生效的,這樣透揣,長(zhǎng)期運(yùn)行下active數(shù)量峰值可達(dá)到100以上济炎,但會(huì)回落,可以回落到個(gè)位數(shù)十位數(shù)辐真,比較穩(wěn)定须尚。
9崖堤、dubbo線(xiàn)程池穩(wěn)定后,A網(wǎng)站爬取的效率則得到了提升耐床,目前速度比較穩(wěn)定密幔,需要長(zhǎng)期觀(guān)察爬取速度和dubbo線(xiàn)程池active數(shù)量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撩轰,一起剝皮案震驚了整個(gè)濱河市胯甩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钧敞,老刑警劉巖蜡豹,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麸粮,死亡現(xiàn)場(chǎng)離奇詭異溉苛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)弄诲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)愚战,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人齐遵,你說(shuō)我怎么就攤上這事寂玲。” “怎么了梗摇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拓哟,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伶授,道長(zhǎng)断序,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任糜烹,我火速辦了婚禮违诗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疮蹦。我一直安慰自己诸迟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布愕乎。 她就那樣靜靜地躺著阵苇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪感论。 梳的紋絲不亂的頭發(fā)上慎玖,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音笛粘,去河邊找鬼趁怔。 笑死湿硝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的润努。 我是一名探鬼主播关斜,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铺浇!你這毒婦竟也來(lái)了痢畜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鳍侣,失蹤者是張志新(化名)和其女友劉穎丁稀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體倚聚,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡线衫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惑折。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片授账。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惨驶,靈堂內(nèi)的尸體忽然破棺而出白热,到底是詐尸還是另有隱情,我是刑警寧澤粗卜,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布屋确,位于F島的核電站,受9級(jí)特大地震影響续扔,放射性物質(zhì)發(fā)生泄漏攻臀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一测砂、第九天 我趴在偏房一處隱蔽的房頂上張望茵烈。 院中可真熱鬧,春花似錦砌些、人聲如沸呜投。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仑荐。三九已至,卻和暖如春纵东,著一層夾襖步出監(jiān)牢的瞬間粘招,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工偎球, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洒扎,地道東北人辑甜。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袍冷,于是被迫代替她去往敵國(guó)和親磷醋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354