記一次端口不釋放的問題

1 背景

一臺服務(wù)器的端口數(shù)是有限的資源犀呼,如果端口被大量占用則會存在未知的故障飒硅。
案例:
線上HiveServer2發(fā)生故障: 大量任務(wù)hang住, 經(jīng)排查是因?yàn)榉?wù)器沒有可用的端口分配造成的涎嚼。
進(jìn)一步排查發(fā)現(xiàn),存在大量狀態(tài)為CLOSE_WAIT50010端口連接刮吧。
50010端口是DN的移必,由此推斷應(yīng)該是存在流未關(guān)閉的情況。

2 定位

2.1 查看當(dāng)前端口數(shù)量使用情況

~]$netstat -tanp | grep "CLOSE_WAIT" | wc -l
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
43957

2.2 查看大量鏈接都是哪個進(jìn)程的

~]$ netstat -tanp | grep "CLOSE_WAIT" | awk '{print $NF}' | awk -F'/' '{print $1}' | sort | uniq -c
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
  22476 63459
  21484 63523

看下是什么進(jìn)程:

 ~]$ ps -ef | grep 63459
hadoop      5796  96249  0 17:21 pts/0    00:00:00 grep --color=auto 63459
hadoop     63459      1 99 Mar04 ?        39-01:46:41 /usr/local/jdk1.8.0_77//bin/java ...(省略) hive-service-1.2.1-325.jar org.apache.hive.service.server.HiveServer2 
 ~]$ ps -ef |grep 63523
hadoop      5979  96249  0 17:21 pts/0    00:00:00 grep --color=auto 63523
hadoop     63523      1 99 Mar04 ?        41-10:04:18 /usr/local/jdk1.8.0_77//bin/java...(省略)hive-service-1.2.1-325.jar org.apache.hive.service.server.HiveServer2

可以看出是HiveServer2進(jìn)程遭殉。

2.3 查看都是什么連接

看下HiveServer2進(jìn)程都是什么連接:

 ~]$ netstat -tanp | grep "CLOSE_WAIT" | grep -E '63459|63523' | awk '{print $5}' | awk -F':' '{print $1,$NF}' | sort  | uniq -c | sort -nk1
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
      1 10.11.11.11 38673
      ...
  10703 10.11.11.12 50010
  10716 10.11.11.13 50010
  10803 10.11.11.14 50010

50010端口連接有多少呢石挂?

~]$ netstat -tanp | grep 50010 | wc -l
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
43973

可以看出是大量的50010端口連接, 50010是DN的端口险污,由此可見存在訪問DN但未釋放連接的情況痹愚。

2.4 根因分析

2.4.1 是否是Hive引擎自身bug ?

首先,如果Hive引擎自身bug拯腮,這個問題早就應(yīng)該暴露出來窖式。
其次,Hive引擎連接泄漏的bug已經(jīng)修過好多了疾瓮,尤其是FileSystem相關(guān)的脖镀,所以可能性不大。
最后狼电,我們查閱了社區(qū)相關(guān)issue蜒灰,沒有相關(guān)問題。

由于Hive提供了開放的UDF接口肩碟,從經(jīng)驗(yàn)判斷不規(guī)范的UDF也是有可能導(dǎo)致這個問題的强窖。

2.4.2 實(shí)錘定位UDF

我們抓取當(dāng)前日志加載的UDF函數(shù)包:

~]$ grep "Added resources" hive.log | awk '{print $NF}' | sort | uniq -c

經(jīng)分析抓取嫌疑最大的UDF并反編譯用戶UDF包發(fā)現(xiàn),用戶代碼邏輯存在讀取hdfs文件的情況削祈,且讀取文件后翅溺,未關(guān)閉流。
至此真想大白髓抑。

3 反思

Hive提供了特別開放的UDF接口咙崎,用戶可以自定義UDF實(shí)現(xiàn)任何你想到的邏輯(包括System.exists(1), 曾出現(xiàn)過用戶在UDF中調(diào)用System.exists(1)導(dǎo)致HiveServer2服務(wù)進(jìn)程退出的情況),開放的同時帶來了很大的安全隱患吨拍,尤其是采用HS2集中式服務(wù)的環(huán)境來說褪猛。

為保障服務(wù)的穩(wěn)定性,我們做了這么幾件事:

  • 1)做服務(wù)器端口使用情況的監(jiān)控
  • 2)HS2在UDF中禁用System.exists
  • 3)在集中式HS2服務(wù)中羹饰,自定義UDF的發(fā)布需要有嚴(yán)格的代碼審查流程伊滋。

其中,第二點(diǎn)是需要對Hive源碼進(jìn)行改造的队秩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笑旺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馍资,更是在濱河造成了極大的恐慌筒主,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸟蟹,死亡現(xiàn)場離奇詭異物舒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戏锹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來火诸,“玉大人锦针,你說我怎么就攤上這事。” “怎么了奈搜?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵悉盆,是天一觀的道長。 經(jīng)常有香客問我馋吗,道長焕盟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任宏粤,我火速辦了婚禮脚翘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绍哎。我一直安慰自己来农,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布崇堰。 她就那樣靜靜地躺著沃于,像睡著了一般。 火紅的嫁衣襯著肌膚如雪海诲。 梳的紋絲不亂的頭發(fā)上繁莹,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音特幔,去河邊找鬼咨演。 笑死,一個胖子當(dāng)著我的面吹牛敬辣,可吹牛的內(nèi)容都是我干的雪标。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼溉跃,長吁一口氣:“原來是場噩夢啊……” “哼村刨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撰茎,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嵌牺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后龄糊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逆粹,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年炫惩,在試婚紗的時候發(fā)現(xiàn)自己被綠了僻弹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡他嚷,死狀恐怖蹋绽,靈堂內(nèi)的尸體忽然破棺而出芭毙,到底是詐尸還是另有隱情,我是刑警寧澤卸耘,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布退敦,位于F島的核電站,受9級特大地震影響蚣抗,放射性物質(zhì)發(fā)生泄漏侈百。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一翰铡、第九天 我趴在偏房一處隱蔽的房頂上張望钝域。 院中可真熱鬧,春花似錦两蟀、人聲如沸网梢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽战虏。三九已至,卻和暖如春党涕,著一層夾襖步出監(jiān)牢的瞬間烦感,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工膛堤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留手趣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓肥荔,卻偏偏與公主長得像绿渣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子燕耿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 翻譯: https://cwiki.apache.org/confluence/display/Hive/Set...
    金剛_30bf閱讀 25,359評論 0 3
  • Hive是什么? Hive是一種基于Hadoop的數(shù)據(jù)庫技術(shù)并提供完整的sql查詢功能, . HIVE能做什么? ...
    日出卡爾閱讀 2,694評論 0 0
  • 人生的奔跑誉帅,不在于瞬間的爆發(fā)淀散,而取決于途 中的堅(jiān)持。能激勵你蚜锨,溫暖你档插,感動你的,不 是勵志語錄或心靈雞湯亚再,而是身邊...
    小梁姑涼閱讀 287評論 2 0
  • 傾訴需知己郭膛。向知己傾訴隱秘,就是情真意切的投降氛悬。傾訴隱秘是傾盡精神的全部饲鄙,沒有遮...
    冰夫閱讀 108評論 0 0
  • 觀白人閱讀 253評論 0 5