服務器中出現“too many open files”的錯誤主要原因有兩個:
1、可能是打開的文件或是socket沒有正常關閉。
爲了定位問題是否由Java進程引起,通過Java進程號查看當前進程佔用文件描述符情況:
lsof -i:port 通過你程序使用端口的查看PID
lsof -p pid每個文件描述符的具體屬性
lsof -p pid | wc -l 查看某一進程的打開文件數量
2、系統級設置對所有用戶有效
查看每個用戶最大允許打開文件數量
ulimit -n
修改用戶允許最大打開文件數量
sudo vim /etc/security/limits.conf
在最後加入
* soft nofile 4096
* hard nofile 4096
最前的 * 表示所有用戶,可根據需要設置某一用戶,例如
user soft nofile 8192
user hard nofile 8192
改完後註銷一下就能生效。
小結:如果你的進程達到了系統允許的最大打開文件數量時,去檢查一下自己的代碼是否有文件流沒有正常關閉;如果需要擴大最大文件打開數量按第二種情況操作,數量是1024、2048、4096等2的n次方。