今天線上遇到一個(gè)問(wèn)題,我有個(gè)服務(wù)調(diào)es做curd, 有一段時(shí)間服務(wù)突然不接收請(qǐng)求,進(jìn)程還活著,就是單純的請(qǐng)求進(jìn)不來(lái)了,但是過(guò)了一會(huì)兒又好了。排查了一下故障前后有大量的請(qǐng)求丟棄(服務(wù)是rpc調(diào)用,服務(wù)端有4個(gè)隊(duì)列每個(gè)隊(duì)列32線程),觀察到隊(duì)列中有很多請(qǐng)求等待時(shí)間過(guò)長(zhǎng)。
服務(wù)當(dāng)時(shí)是這樣的:
瞬間一段時(shí)間(18:19)就沒(méi)有流量了,然而進(jìn)程還在。
后來(lái)莫名其妙自己又活了,但是活了以后瞬間并發(fā)量上來(lái)了。
因?yàn)榉?wù)影響面積大,問(wèn)題出現(xiàn)瞬間我嘗試重啟服務(wù),但是并沒(méi)什么用,起來(lái)后收到幾次請(qǐng)求立馬又假死了。
排查的過(guò)程中,在日志里面又看到 有少數(shù)請(qǐng)求調(diào)用時(shí)間非常久,估計(jì)是因?yàn)檫@個(gè)導(dǎo)致所有線程都被占滿了,騰不出更多的空來(lái)接受新的請(qǐng)求了。
可以確保不是網(wǎng)絡(luò)問(wèn)題,因?yàn)檫@一段時(shí)間服務(wù)器是有出口流量的,找運(yùn)維同學(xué)看過(guò)監(jiān)控了。
另外,這一段時(shí)間的內(nèi)存稍微吃的有點(diǎn)多,但是沒(méi)有出現(xiàn)大面積全GC,個(gè)人覺(jué)得不太像是全GC導(dǎo)致的,至少GC日志看不到FullGC 字樣,只是cms gc回收老年代頻率高了點(diǎn)。
這個(gè)rpc服務(wù) 里面是調(diào)用elasticsearch做增刪改查業(yè)務(wù)的,調(diào)用量挺高的,不過(guò)出問(wèn)題的時(shí)候是低峰期,我覺(jué)得唯一的解釋就是這一會(huì)兒存在一些 查詢或者修改很慢的請(qǐng)求占用了這128個(gè)線程不釋放。
好了,問(wèn)題和我自己的假設(shè)已經(jīng)敘述完了, 如果我的假設(shè)成立的話,那么優(yōu)化方向似乎就變成了:如何提升請(qǐng)求響應(yīng)速度,進(jìn)而演變?yōu)榱耍喝绾翁嵘齟lasticsearch 的增刪改查效率(的確,線上環(huán)境再一些高峰期的時(shí)候,會(huì)出現(xiàn)一些刪改查比較慢的請(qǐng)求,但es的刪改查效率原本也不高),這塊的優(yōu)化方案是我想問(wèn)大伙兒的。
另外,是不是需要設(shè)置增刪改查和es交互這塊的超時(shí)時(shí)間,比如es api里面有 get(timeout)這種方法,但是我又不知道這個(gè)數(shù)設(shè)置多少是合適的,這塊也是我想問(wèn)的。
超時(shí)這個(gè)問(wèn)題上,是不是在es api客戶端也要做文章,有沒(méi)有可能是我調(diào)用es 客戶單發(fā)起請(qǐng)求,但是每次請(qǐng)求完我并沒(méi)有close,這樣導(dǎo)致鏈接長(zhǎng)時(shí)間不釋放,阻塞了es集群,導(dǎo)致很多es操作時(shí)間其實(shí)并不長(zhǎng),但是都浪費(fèi)在了等待es服務(wù)端接受請(qǐng)求上。不過(guò)貌似TransportClient是做了連接池的吧,這樣還需要我手動(dòng)close鏈接嗎?這也是我想問(wèn)的。
最后,大家?guī)兔Ψ治鱿?,這種假死行為還有沒(méi)有可能是別的原因,由于事發(fā)緊急,沒(méi)來(lái)得及捕獲更多信息,我能保證的是內(nèi)存和cpu還是足夠的,機(jī)器監(jiān)控記錄能看到。網(wǎng)絡(luò)OK的,進(jìn)程沒(méi)有死。
有遇到類似問(wèn)題的同學(xué),歡迎一起探討。
我們貌似也遇到過(guò)類似的問(wèn)題,我們當(dāng)時(shí)因?yàn)槭聞?wù)引起的,后來(lái)調(diào)小了事務(wù)的粒度,解決了這樣的問(wèn)題。
我們排查過(guò)程這樣做的,在服務(wù)中的關(guān)鍵位置(如查數(shù)據(jù)庫(kù),業(yè)務(wù)業(yè)務(wù),接口內(nèi)層,接口外層)做耗時(shí)記錄,再壓測(cè)可以看到在哪個(gè)環(huán)境耗時(shí)最多,即造成阻塞的點(diǎn);然后分析到是事務(wù)控制不當(dāng),頻繁開(kāi)啟事務(wù),導(dǎo)致最終的后果。
另外,磁盤的IO情況如何呢?
以上,愿對(duì)你有幫助!
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。