一、現象
啓動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