併發量高會報錯:java.io.IOException: Too many open files

用 CentOS 做 API 接口服務器供其他終端調用時,併發量高會報錯:java.io.IOException: Too many open files。

其原因是在 Linux 下默認的Socket最大連接數爲 1024(可以通過 ulimit -n 查看)

於是開始修改Linux的配置文件來增加連接數: 

1.在/etc/rc.local 後增加一行

ulimit -SHn 65535

2.在/etc/profile 後增加一行 

ulimit -SHn 65535

3.在/etc/security/limits.conf最後加入兩行

* soft nofile 65535

* hard nofile 65535

如果問題還未解決則有可能是程序中有些資源鏈接打開一直未關閉則需要進一步查看找到問題所在

查看當前系統打開的文件數量

lsof | wc -l
watch "lsof | wc -l"

查看某一進程的打開文件數量
lsof -p pid | wc -l
lsof -p 1234 | wc -l




找到句柄數量最多的進程id  查看 lsof -p 25397 





發現很多鏈接一直未關閉。則定位到代碼中發起請求未關閉流導致問題,修改後解決問題

發佈了42 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章