問題描述:java工程,啟動tomcat后發現catalina.out啟動日志 報錯“Too many open files”
原因:句柄數超出系統限制。
句柄含義:不單是文件,也包括打開的通訊鏈接(比如socket),正在監聽的端口等等
解決:ulimit -a 可以查看當前系統設置的最大句柄數是多少,如下圖 open files即是最大句柄數設置
查看全部進程占用句柄數總和:lsof|awk '{print $2}'|wc -l
查看某一個進程占用句柄數: ls -l /proc/pid(例如10124)/fd/ | wc -l
查看系統中進程打開文件數的一個排序:lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
如果總和超過最大句柄數設置,則設置最大句柄數即可,命令如下
ulimit –n 65535 設置最大句柄數是65535
可以再次輸入ulimit -a 查看確認是否生效,如下圖
生效,解決!
ulimit –n 2000
這個命令可以把默認的句柄數改為2000,但系統重啟后會恢復默認值
這個文件在系統中的默認值配置在/etc/security/limits.conf文件中,加入以下配置:
* soft nofile 2000
* hard nofile 2000
或者
* - nofile 2000
其中hard的設置是實際的默認值,也就是上限,而soft的配置只是用來警告的,如果超過了soft的值,會有warn,而第三種用短橫線– 的配置,則是hard和soft同時配置的方式。
擴展:linux句柄如何理解