今天在生产服务器(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
保存退出,即可。