Too many open files错误

一、现象
启动tomcat程序报错:Too many open filesjava

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

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

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

* soft nofile 65535  
* hard nofile 65535

或者vim

* - nofile 65535

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

四、Ubuntu系统不生效
Ubuntu系统按上面的设置不会生效,需要注明用户才会生效(其余系统不用)。app

pdsadmin - nofile 65535

Too many open files错误

而后从新登陆xshell,不须要重启,ulimit -n 能够看到文件打开数已是65535了,这就是ubuntu系统 设置limits.conf不生效的缘由,必定不能直接用 * 。socket

相关文章
相关标签/搜索