Linux下java报错Too many open files的解决方法

最近发现运行在Linux下的java application报如下错误:

27-May-2019 10:16:04.722 SEVERE [http-nio-8080-exec-213] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [spring] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.ExceptionInInitializerError] with root cause
 java.io.FileNotFoundException: /www/CMTLTP/WEB-INF/lib/jasperreports-5.6.1.jar (Too many open files)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(Unknown Source)
    at java.util.zip.ZipFile.<init>(Unknown Source)
    at java.util.jar.JarFile.<init>(Unknown Source)

解决方案:

 

1. 提高linux中默认同时打开的最大文件数量(默认是1024)

最便捷的方法是在/etc/profile文件中加入ulimit -n 最大开启数量

但是这种方法无法从根本上查出什么原因导致java打开了这么多的文件

 

 

2. java端调查开启文件多的原因

 Linux下查看进程打开了哪些文件(lsof 需要安装)

 lsof -p  进程id    ->  打开的具体文件
 lsof -p  进程id|wc -l   ->  打开文件的数量

 

通过调查发现,java开了很多TYPE为FIFO(Linux中的管道)的文件,因此联想到有可能是java代码中的流没有正常关闭或者释放导致的。

而且Java在Linux下执行命令的时候需要用到Process类,这个类在使用后需要destroy()掉,否者也会导致文件数开启的过多
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值