Too many open files错误

1、现象
启动tomcat程序报错:Too many open files

Caused by: java.io.IOException: Too many open files
    at sun.nio.ch.EPollArrayWrapper.epollCreate(Native Method)
    at sun.nio.ch.EPollArrayWrapper.<init>(EPollArrayWrapper.java:130)
    at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:68)
    at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:36)
    at java.nio.channels.Selector.open(Selector.java:227)
    at org.jboss.netty.channel.socket.nio.NioWorker.register(NioWorker.java:102)
    ... 6 more

2、原因
进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数,通过命令ulimit -a 可以查看当前系统设置的最大句柄数是多少;open files那一行就代表系统目前允许单个进程打开的最大句柄数,默认是1024。先看看启动的tomcat进程打开了多少文件:
sudo lsof -p 8321 | wc -l
Too many open files错误
8321是进程的ID,可看到已经超过了系统设置的大小。

3、解决方法
增大系统的文件限制数
vim /etc/security/limits.conf //在最后加入

* soft nofile 65535  
* hard nofile 65535  

或者

* - nofile 65535

说明:“nofile”项有两个限制措施:hard和soft, 要使修改过的最大打开文件数生效,必须对这两种限制进行设定; 如果使用”-“字符设定, 则hard和soft会被同时设定。

4、Ubuntu系统不生效
Ubuntu系统按上面的设置不会生效,须要注明用户才会生效(其他系统不用)。

pdsadmin - nofile 65535

Too many open files错误

然后重新登录xshell,不需要重启,ulimit -n 可以看到文件打开数已经是65535了,这就是ubuntu系统 设置limits.conf不生效的原因,一定不能直接用 * 。

猜你喜欢

转载自blog.51cto.com/msiyuetian/2319255