记一次too many open files 异常

“位卑未敢忘忧国,事定犹须待阖棺”


这是一次生产事故。更新了代码之后,第二天一早便有客户反馈服务器访问不了。
我从梦中惊醒,开始检查问题。

在查看了日志之后,发现了下面的错误:
在这里插入图片描述

java.io.IOException: Too many open files

我在想,是什么文件被打开多次,导致服务器都挂了呢?一直没有头绪,随后百度了一下,从too many open files(打开的文件过多)解决方法这篇文章中找出了问题,原来是我的过滤器在读取配置文件。
问题分析
因为项目设置ip过滤,几台服务器中好几个节点的ip和端口都要写到过滤器中。于是,我把这些ip写到了一个配置文件中,然后再过滤的方法doFilter()中来读取该配置文件的ip。所以,问题来了,只要项目任何的一个路径被访问,都要进入过滤器,然后读取配置文件判断ip,当用户和操作多的时候,配置文件就被打开的次数太多了。于是,就出现了上面的问题。
在这里插入图片描述
就是这句代码惹的祸。

问题解决
既然这句代码写在doFilter中会导致文件被读取太多次从而引起错误,那么,可以把这个文件的读取写init方法中。这样,只是在项目启动的时候被读取一次,然后定义一个全局变量存起来就OK了。这样就可以在doFilter中使用全局变量来拿到需要过滤的ip了。
在这里插入图片描述

引以为戒!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值