访问服务器时出现java.IOException:打开的文件过多

应用部署在一台测试机器上(Linux),最近发现服务好像挂了。上去看了下打出来的日志,发现报错信息一个是java.net.SocketException,一个是Java.IOException,提示打开的文件过多。
        后来去查了查:说是第一个是在错误影响到基础的TCP协议时会抛出,第二个则是在错误影响到I/O操作时抛出。
        原因:操作系统中打开文件的最大句柄数受限所致,常常发生在多个用户并发访问服务器时,因为为了执行每一个用户的请求,服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄缺乏。
        解决方法:
                1)尽量将类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄;Java的GC不能关闭网络连接打开的文件句柄,因此如果没有执行close操作,则文件句柄将一直存在,而不能 被关闭,因此也可以设置socket的最大打开数去控制。
                2)对操作系统做相关的设置,增加最大文件句柄数量。
下面是第二种方法的步骤:
步骤:

        1)linux下输入ulimit -a命令,可查看允许打开的最大文件数等各种信息。如图所示: 

open files这一栏默认的是1024(我的截图是修改过后的,所以变成了65536),我们需要做的就是修改这个数量。
        2)修改这个配置文件,命令:vi /etc/security/limits.conf
        3)在文件中添加以下内容:
            * soft nofile 65536 
            * hard nofile 65536 
         4)重启服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值