linux 端口数 句柄数,linux文件句柄数
1、問題闡述:linux
too?many?open?files:顧名思義即打開過多文件數(shù)。shell
不過這里的files不單是文件的意思,也包括打開的通信連接(好比socket),正在監(jiān)聽的端口等等,因此有時候也能夠叫作句柄(handle),這個錯誤一般也能夠叫作句柄數(shù)超出系統(tǒng)限制。bash
二、產(chǎn)生的緣由:服務(wù)器
常常在使用linux的時候出現(xiàn),大多數(shù)狀況是因為程序沒有正常關(guān)閉一些資源引發(fā)的,因此出現(xiàn)這種狀況,請檢查io讀寫,socket通信等是否正常關(guān)閉。socket
三、經(jīng)典案例:學(xué)習(xí)
不少項目上線不久運行了一段時間后,服務(wù)忽然宕了,經(jīng)檢查日志,出現(xiàn)了too?many?open?files?錯誤。spa
四、解決方案:日志
前奏:其實Linux是有文件句柄限制的,并且默認不是很高,通常都是1024,做為一臺生產(chǎn)服務(wù)器,其實很容易就達到?這個數(shù)量,所以咱們須要把這個值改大一些。咱們能夠用ulimit?-n?來查看當(dāng)前用戶句柄數(shù)限制。那么這個1024是系統(tǒng)的限制,仍是用戶的限制呢。其實,這個是用戶限制來的,完整的說法,應(yīng)該是當(dāng)前用戶準備要運行的程序的限制。blog
一、這個限制是針對單個程序的限制進程
二、這個限制不會改變以前已經(jīng)運行了的程序的限制
三、對這個值的修改,退出了當(dāng)前的shell就會消失
所以出現(xiàn)這種問題有兩種解決方式:
第一:增大文件句柄數(shù)。這種方式能及時解決問題,可是不可以完全的解決問題,能夠為完全解決問題提供必定的時間保證。那么如何增大文件句柄數(shù)數(shù)呢?
如修改文件句柄數(shù)為65535,ulimit?-n?65535.此時系統(tǒng)的文件句柄數(shù)為65535.
2)將ulimit?值添加到/etc/profile文件中(適用于有root權(quán)限登陸的系統(tǒng))
為了每次系統(tǒng)從新啟動時,均可以獲取更大的ulimit值,將ulimit?加入到/etc/profile?文件底部。
echo?ulimit?-n?65535?>>/etc/profile
source?/etc/profile????#加載修改后的profile
ulimit?-n?????#顯示65535,修改完畢!
到此為止,你覺得大功告成了么,其實否則,忽然發(fā)現(xiàn)本身再次登陸進來的時候,ulimit的值仍是1024,這是為何呢??用戶登陸的時候執(zhí)行sh腳本的順序:
/etc/profile.d/file
/etc/profile
/etc/bashrc
/mingjie/.bashrc
/mingjie/.bash_profile
因為ulimit?-n的腳本命令加載在第二部分,用戶登陸時因為權(quán)限緣由在第二步還不能完成ulimit的修改,因此ulimit的值仍是系統(tǒng)默認的1024。因此想完全改變這種問題,就必須作以下操做:修改/etc/security/limits.conf
里面有很詳細的注釋,好比
*?soft?nofile?2048
*?hard?nofile?32768
就能夠?qū)⑽募浔拗平y(tǒng)一改為軟2048,硬32768
那么什么是軟限制,什么是硬限制
硬限制是實際的限制,而軟限制,是warnning限制,只會作出warning
這樣就實實際際的增大了文件句柄數(shù)。
第二:分析句柄數(shù),查找緣由,這是解決問題最根本的辦法。那么如何分析那,就須要用到lsof這個命令了(關(guān)于這個命令你們能夠在網(wǎng)上學(xué)習(xí)學(xué)習(xí))。
(1)統(tǒng)計各進程打開句柄數(shù):lsof?-n|awk?'{print?$2}'|sort|uniq?-c|sort?-nr
(2)統(tǒng)計各用戶打開句柄數(shù):lsof?-n|awk?'{print?$3}'|sort|uniq?-c|sort?-nr
(3)統(tǒng)計各命令打開句柄數(shù):lsof?-n|awk?'{print?$1}'|sort|uniq?-c|sort?-nr
就掌商通來講,經(jīng)過命令分析發(fā)現(xiàn)是一個叫xmpp的東西打開的鏈接數(shù)居多,占到了單個進程總打開鏈接數(shù)的百分之八十以上,再仔細分析,xmpp是消息推送產(chǎn)生的鏈接,那么到這里問題比較明確了,接下來就是要分析為何消息推送會打開如此多的文件句柄,且一直連著也不斷開。這樣問題就定位了。另外還有一些進程打開文件句柄數(shù)也比較多,這時你能夠?qū)Ρ绕溆喾?wù)器,看是否其余服務(wù)器也是如此,以保證全面的解決問題。
總結(jié)
以上是生活随笔為你收集整理的linux 端口数 句柄数,linux文件句柄数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创 | 聊聊延迟满足
- 下一篇: linux句柄数不足的java报错_li