用 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
發現很多鏈接一直未關閉。則定位到代碼中發起請求未關閉流導致問題,修改後解決問題