====簡(jiǎn)書就是隨便記錄抖棘,不會(huì)太詳細(xì),不會(huì)注重文章的質(zhì)量煌抒,主要給自己看的===
關(guān)于這個(gè)不想說太多,網(wǎng)上一搜很多,大部分都是不負(fù)責(zé)任的琢唾,都是說改什么Linux的配置,我只想說盾饮,這是小學(xué)生吧采桃? 這明顯就是治標(biāo)不治本袄廖酢!F瞻臁工扎!
1、首先衔蹲,得定位問題肢娘,查,到底是哪些進(jìn)程或線程打開了大量的連接(scoket)沒有關(guān)閉
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more
2踪危、如果Linux是內(nèi)網(wǎng)環(huán)境不支持lsof命令蔬浙,那就離線安裝gcc
百度網(wǎng)盤地址: https://pan.baidu.com/s/1xFDKEJ3UkLoNJmBxIflnEg 提取碼: mxtg
上面是下載地址,里面都是些gcc安裝需要依賴的rpm包贞远,里面有個(gè)sh腳本畴博,是用來一鍵安裝所有包的
將這些rmp傳到linux服務(wù)器下,統(tǒng)一安裝即可:
rpm -Uvh *.rpm --nodeps --force
3蓝仲、查看當(dāng)前進(jìn)程相關(guān)的連接
lsof | grep pid
4俱病、jps查看當(dāng)前java進(jìn)程的狀態(tài)
jps
5、查看當(dāng)前進(jìn)程屬于哪個(gè)應(yīng)用
ps -ef | grep pid
6袱结、殺掉對(duì)應(yīng)的pid
kill -9 pid
8亮隙、總結(jié)
由于是生產(chǎn)內(nèi)網(wǎng)環(huán)境遇到的,就不截圖了垢夹,直接說明最后怎么解決的:
1溢吻、tomcat運(yùn)行一段時(shí)間就會(huì)輸出大量日志: xxxx too many open flle,這個(gè)錯(cuò)一報(bào)果元,tocmat所在的linux服務(wù)器就什么連接都create不了促王,結(jié)果導(dǎo)致服務(wù)癱瘓,前端請(qǐng)求一直pending
2而晒、每次重啟服務(wù)蝇狼,臨時(shí)解決,發(fā)現(xiàn)不一會(huì)又出現(xiàn)xxxx too many open flle錯(cuò)誤
3倡怎、索性迅耘,將ulimit -n 顯示的值 從1024 改成了 2w+,還是不行监署,運(yùn)行一段時(shí)間又報(bào)錯(cuò)
4颤专、什么情況,抓狂中钠乏,只能lsof查看一下血公,到底是哪些進(jìn)程打開的file(linux一切皆文件)比較多,其實(shí)file就是一個(gè)tcp連接(socket)
5缓熟、結(jié)果發(fā)現(xiàn)累魔,內(nèi)網(wǎng)環(huán)境linux上沒安裝lsof,臥槽够滑,那就安裝唄垦写,外網(wǎng)下了一個(gè)二進(jìn)制包,準(zhǔn)備編譯彰触,結(jié)果make時(shí)提示我需要gcc
6梯投、那就安裝gcc唄,外網(wǎng)準(zhǔn)備相關(guān)依賴包况毅,內(nèi)網(wǎng)安裝分蓖,歐克了,lsof可以用了
7尔许、利用lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more查看了排在前面的幾個(gè)進(jìn)程么鹤,利用jps比對(duì)了一下,果不其然味廊,指向的就是tomcat蒸甜,但是額外發(fā)現(xiàn)有好多個(gè)tomcat進(jìn)程實(shí)例(重復(fù)的,可能之前tomcat關(guān)閉時(shí)余佛,沒政正常shutdown)柠新,于是用kill命令手動(dòng)全部干掉了
8、重啟tomcat辉巡,保證只有一個(gè)jps進(jìn)程恨憎,跟了下,程序運(yùn)行期間郊楣,files數(shù)一直在增長(zhǎng)憔恳,于是定位就是這個(gè)服務(wù)本身的問題,實(shí)際上就是代碼寫的有問題痢甘,有資源用完了未釋放喇嘱,造成tcp連接一直掛著,占用著linux的文件句柄資源
9塞栅、利用 lsof | grep pid命令者铜,查看了進(jìn)程的連接情況,結(jié)果發(fā)現(xiàn)大量的狀態(tài)為Established的tcp連接放椰,他們清一色的指向mongodb
10作烟、那么問題就好辦了,先在mongodb中查詢當(dāng)前連接的數(shù):db.serverStatus().connections;發(fā)現(xiàn)current的值在持續(xù)++砾医,肯定就不對(duì)勁了
11拿撩、debug項(xiàng)目代碼,定位問題在一些數(shù)據(jù)入庫的時(shí)候異常了如蚜,結(jié)果定時(shí)器頻繁重執(zhí)行压恒,而入庫分兩步影暴,一個(gè)是入mongodb,一個(gè)入postgresql探赫,前者入的時(shí)候型宙,代碼中忘關(guān)client連接了
12、將11步定位的問題代碼處伦吠,加了連接close()的方法
13妆兑、再重新打包服務(wù),發(fā)布毛仪,觀察搁嗓,問題不在出現(xiàn)!O溲ァO俟洹!解決
最后編輯于 :2021.02.25 14:32:46
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者