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