详解 Too many open files
生活随笔
收集整理的這篇文章主要介紹了
详解 Too many open files
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運行在Linux系統上的Java程序可能會出現"Too many open files"的異常情況,且常見于高并發訪問文件系統,多線程網絡連接等場景。?
??????? 程序經常訪問的文件、socket在Linux中都是文件file,系統需要記錄每個當前訪問file的name、location、access authority等相關信息,這樣的一個實體被稱為file entry。“open files table”(圖中橙色標識)存儲這些file entry,以數組的形式線性管理。文件描述符(file descriptor)作為進程到open files table的指針,也就是open files table的下標索引,將每個進程與它所訪問的文件關聯起來了。?
?
????????每個進程中都有一個file descriptor table管理當前進程所訪問(open?or?create)的所有文件,文件描述符關聯著open files table中文件的file entry。細節不表,對于open files table能容納多少file entry。Linux系統配置open files table的文件限制,如果超過配置值,就會拒絕其它文件操作的請求,并拋出Too many open files異常。這種限制有系統級和用戶級之分。?
???????系統級:?
????????????????系統級設置對所有用戶有效。可通過兩種方式查看系統最大文件限制?
??????????????? 1??cat /proc/sys/fs/file-max??
??????????????? 2??sysctl -a?查看結果中fs.file-max這項的配置數量?
??????????????? 如果需要增加配置數量就修改/etc/sysctl.conf文件,配置fs.file-max屬性,如果屬性不存在就添加。?
????????????????配置完成后使用sysctl -p來通知系統啟用這項配置?
???????用戶級:?
????????????????Linux限制每個登錄用戶的可連接文件數。可通過??ulimit -n來查看當前有效設置。如果想修改這個值就使用?ulimit -n <setting number>?命令。?
????????????? 對于文件描述符增加的比例,資料推薦是以2的冪次為參考。如當前文件描述符數量是1024,可增加到2048,如果不夠,可設置到4096,依此類推。?
???????在出現Too many open files問題后,首先得找出主要原因。最大的可能是打開的文件或是socket沒有正常關閉。為了定位問題是否由Java進程引起,通過Java進程號查看當前進程占用文件描述符情況:?
Java代碼?? lsof?-p?$java_pid?每個文件描述符的具體屬性?? lsof?-p?$java_pid?|?wc?-l??當前Java進程file?descriptor?table中FD的總量??
????????分析命令的結果,可判斷問題是否由非正常釋放資源所引起。?
??????? 程序經常訪問的文件、socket在Linux中都是文件file,系統需要記錄每個當前訪問file的name、location、access authority等相關信息,這樣的一個實體被稱為file entry。“open files table”(圖中橙色標識)存儲這些file entry,以數組的形式線性管理。文件描述符(file descriptor)作為進程到open files table的指針,也就是open files table的下標索引,將每個進程與它所訪問的文件關聯起來了。?
?
????????每個進程中都有一個file descriptor table管理當前進程所訪問(open?or?create)的所有文件,文件描述符關聯著open files table中文件的file entry。細節不表,對于open files table能容納多少file entry。Linux系統配置open files table的文件限制,如果超過配置值,就會拒絕其它文件操作的請求,并拋出Too many open files異常。這種限制有系統級和用戶級之分。?
???????系統級:?
????????????????系統級設置對所有用戶有效。可通過兩種方式查看系統最大文件限制?
??????????????? 1??cat /proc/sys/fs/file-max??
??????????????? 2??sysctl -a?查看結果中fs.file-max這項的配置數量?
??????????????? 如果需要增加配置數量就修改/etc/sysctl.conf文件,配置fs.file-max屬性,如果屬性不存在就添加。?
????????????????配置完成后使用sysctl -p來通知系統啟用這項配置?
???????用戶級:?
????????????????Linux限制每個登錄用戶的可連接文件數。可通過??ulimit -n來查看當前有效設置。如果想修改這個值就使用?ulimit -n <setting number>?命令。?
????????????? 對于文件描述符增加的比例,資料推薦是以2的冪次為參考。如當前文件描述符數量是1024,可增加到2048,如果不夠,可設置到4096,依此類推。?
???????在出現Too many open files問題后,首先得找出主要原因。最大的可能是打開的文件或是socket沒有正常關閉。為了定位問題是否由Java進程引起,通過Java進程號查看當前進程占用文件描述符情況:?
Java代碼??
????????分析命令的結果,可判斷問題是否由非正常釋放資源所引起。?
總結
以上是生活随笔為你收集整理的详解 Too many open files的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TermServDevices错误的解决
- 下一篇: 死锁:多线程同时删除唯一索引上的同一行