今天大早来看测试服务器并发测试后的效果,结果不出意外宕机了,检查了一下tomcat抛错
Socket accept failed java.io.IOException: Too many open files
文件打开得太多了,奇怪的是自己的服务器程序并没有做文件读写操作,怎么会出这个异常呢,检查了一下得出以下结论
在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制
采用的是tomcat nio的模式所以造成了并发太大宕机了
解决办法如下:
前两句是修改参数 最后一句是生效
// 文件数
echo "fs.file-max = 65535" >> /etc/sysctl.conf
// tcp 连接数
echo "* - nofile 65535" >> /etc/security/limits.conf
sysctl -p
当前设置最大打开文件数可以通过如下命令查看。
ulimit -n
接着重启机器就可以了
参考以下两篇文章
http://blog.csdn.net/qxk1989/article/details/7822792
http://blog.csdn.net/guowake/article/details/6615728