今天在生产服务器(cend os,resin)上发现这个错误,导致http链接出错。在网上查了下:
java.net.SocketException: Too many open files错误,由于linux对进程的打开文件数是有限制的,超过了此限制,就会报错。
- lsof
-p 12349 查看链接数,12349是tomcat的进程 - lsof
-P 12349|wc -l
- ulimit
-u 查看open files设置 - ulimit
-a 查看所有设置 - ulimit
-u 65535(新的open files 值)修改设置 - ulimit
-n 65536 设置用户可以同时打开的最大文件数(max open files) -
- 如果本参数设置过小,对于并发访问量大的网站,可能会出现too
many open files的错误 - 使用lsof
-p pid [httpd进程的 pid、java的pid]来查看系统中apache进程和java运行时进程当前打开的文件资源,发现两者之和已经接近1024,大于了默认的设置。 -
- 修改配置:
-
- 修改/etc/security/limits.conf,在文件末加上
- *
soft nofile 65536 - *
hard nofile 65536
修改/etc/security/limits.conf,在文件末加上
* soft nofile 65536
* hard nofile 65536
保存退出,即可。