java.net.SocketException: Too many open files

2013-06-28

java应用日志显示异常:java.net.SocketException: Too many open files,这是因为网络请求过多,也就导致了系统打开的文件过多。每一个连接都会当成“文件”看待的。

1、ulimit命令
查看每个用户允许打开的最大文件数
ulimit -a
修改最大文件数
ulimit -n 4096
ulimit -u 16384 -n 65536

2、修改limits.conf
* soft nproc 8192
* hard nproc 16384
* soft nofile 8192
* hard nofile 65536

3、要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。
查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so

4、必须重启下网络服务,重启之后无异常
导致 Too many open files ,网络请求过多是一种可能,但也有可能是程序上的缺陷,如没有释放一些文件句柄,程序open了文件却忘记了在最后close。但我确信工程中没有用到打开文件这一环节,因此这个可能是排除掉了。

用lsof -p [进程ID] 可以看到某ID的打开文件状况。进程ID可能用 ps -ef|grep java列出java的进程ID,然后用此ID套入lsof -p ID号,适当调整后便已消除这种现象。

分类:Linux | 标签: |

相关日志

评论被关闭!