java.net.SocketException:Too many open files 解決方案


java.net.SocketException:Too many open files 解決方案


 

問題說明

近期現場環境中,有一個跑在Tomcat容器里的服務報錯“java.net.SocketException:Too many open files”,導致整個平台訪問很慢很卡。

報錯截圖如下:

 

 

原因分析

Linux對打開文件的數量有限制,使用如下命令查看到的最大文件數量是1024,命令如下:

ulimit -a | grep open

或者

ulimit -n

 

解決方案

調整可以打開的最大文件數。

方式1(臨時方案)

使用命令修改可以打開的最大文件數,但是機器重啟后,就會失效。

ulimit -n 65535

 

方式2(根本方案)

修改配置文件

/etc/security/limits.conf 文件的最后增加如下內容,重啟機器即可。

# End of file
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

 

PS

    往往這種問題,根源可能是由於多次打開某個文件或者創建了很多連接,沒有及時關閉導致的。可以通過如下命令查看某個進程打開的連接數:

lsof -p PID | wc -l

其中,PID 是服務對應的進程ID。

此時,需要仔細審核自己寫的代碼,檢查是不是有多次打開文件或者多次創建了連接,沒有及時關閉的情況。

 

 

 


免責聲明!

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



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