Tomcat运行java程序报错:"(too many open files)"的解决方法

Tomcat运行java程序有时候程序在正常运行一段时间后出现这样的报错信息:"java.io.FileNotFoundException(too many open files)"(打开的文件过多)。下面给出一种针对此问题的解决方法。

一、产生原因

too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle)。

这个错误通常也可以叫做句柄数超出系统限制。 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

①通过命令 ulimit -a 可以查看当前系统设置的最大句柄数是多少:

open files那一行就代表系统目前允许单个进程打开的最大句柄数,默认是1024。

ulimit -a

②使用命令 lsof -p [进程id] 可以查看单个进程所有打开的文件详情。

lsof -p [进程id]

③使用命令 lsof -p [进程id] | wc -l 可以统计进程打开了多少文件。

lsof -p [进程id] | wc -l

④如果文件数过多使用 lsof -p [进程id] 命令无法完全查看的话,可以使用 lsof -p [进程id] > openfiles.log 将执行结果内容输出到日志文件中查看。

lsof -p [进程id] > openfiles.log

 

二、解决方法

1、增大允许打开的文件数——命令方式

ulimit -n 2048

这样就可以把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原为默认值。

ulimit -n命令非root用户只能设置到4096。

想要设置到8192需要sudo权限或者root用户。

 

2、增大允许打开的文件数——修改系统配置文件

vim /etc/security/limits.conf 

     在配置文件最后添加以下内容:

#在最后加入 

* soft nofile 8192

* hard nofile 8192

或者只加入

* - nofile 8192
roy soft nofile 8192 

roy hard nofile 8192 

最前的 * 表示所有用户,可根据需要设置某一用户,例如     

 

注意”nofile”项有两个可能的限制措施。就是项下的hard和soft。

要使修改过得最大打开文件数生效,必须对这两种限制进行设定。

如果使用”-“字符设定, 则hard和soft设定会同时被设定。

* soft nofile 1024000

* hard nofile 1024000

hive  - nofile 1024000

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值