《LINUX學習:Too many open files 問題解決方法》要點:
本文介紹了LINUX學習:Too many open files 問題解決方法,希望對您有用。如果有疑問,可以聯系我們。
查看當前系統打開的文件數量
lsof | wc -l?
watch "lsof | wc -l"
查看某一進程的打開文件數量
lsof -p pid | wc -l?
lsof -p 1234 | wc -l
該問題最大的可能是打開的文件或是socket沒有正常關閉.為了定位問題是否由Java進程引起,通過Java進程號查看當前進程占用文件描述符情況:
lsof -p $java_pid ?# 每個文件描述符的具體屬性?
lsof -p $java_pid | wc -l ? # 當前Java進程file descriptor table中FD的總量
?
排序查看當前進程打開了多少句柄數
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
系統級設置對所有用戶有效.可通過以下方式查看系統最大文件限制
Linux限制每個登錄用戶的可連接文件數.可通過ulimit -n來查看當前有效設置.如果想修改這個值就使用 ulimit -n <setting number> 命令.
對于文件描述符增加的比例,資料推薦是以2的冪次為參考.如當前文件描述符數量是1024,可增加到2048,如果不夠,可設置到4096,依此類推.
句柄是表示你的進程與外界的i/o連接,文件句柄是一個十六位長度的二進制代碼(Windows95后為32位無符號整數),代表一個已被打開文件的通道號,借助于這個句柄,你的應用程序即可使用這個相應的句柄對文件進行隨意存取操作,說白了文件句柄其實是一串代表著特殊含義的號碼; 當然其實系統是用句柄與一些資源聯系起來的,當由系統管理,動態分配給你應用程序的某些資源的代號,你就可以使用句柄訪問相應的資源了,尤其在Windows系統中,有很多東東都使用句柄,如窗口,socket.
簡單看來程序通過句柄獲得資源的引用,來進行資源的打開和關閉的操作.
主要是因為linux在文件句柄的數目上有兩個級別的限制.一個是系統級別的總數限制,一個是針對用戶的限制.默認情況下每個用戶所能使用的句柄數是1024.一般情況下1024也夠用了,但是在大容量的系統上,特別是會頻繁使用網絡通信和文件IO的系統上,1024很快就被耗光了.所以首先我們要調整這個值.
?
學習更多LINUX教程,請查看站內專欄,如果有LINUX疑問,可以加QQ交流《LINUX學習:Too many open files 問題解決方法》。