Too many open files問題解決


問題描述: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句柄如何理解

在linux系統設計里面遵循一切都是文件的原則,即磁盤文件、目錄、網絡套接字、磁盤、管道等,所有這些都是文件,在我們進行打開的時候會返回一個fd,即是文件句柄。如果頻繁的打開文件,或者打開網絡套接字而忘記釋放就會有句柄泄露的現象。在linux系統中對進程可以調用的文件句柄數進行了限制,在默認情況下每個進程可以調用的最大句柄數是1024個,如果超過了這個限制,進程將無法獲取新的句柄,而從導致不能打開新的文件或者網絡套接字,對於線上服務器即會出現服務被拒絕的情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM