](https://linux22.com/image/1566373/Tomcat%20%E6%9C%AA%E9%87%8A%E6%94%BE%E6%96%87%E4%BB%B6%20%5B%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%E8%BF%87%E5%A4%9A%E9%94%99%E8%AF%AF%5D%EF%BC%88oracle%20APEX%20-%3E%20Tomcat%EF%BC%89.png)
我在使用 tomcat 时遇到一个问题,总是收到“打开文件过多”的提示
25-Jul-2018 08:17:49.504 SEVERE [http-nio-443-exec-31] . /u01/app/ords/ords.18.1.1.95.1251/db_conf/m/url-mapping.xml: Too many open files
java.nio.file.FileSystemException: /u01/app/ords/ords.18.1.1.95.1251/db_conf/m/url-mapping.xml: Too many open files
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
我尝试将打开文件的 ulimit 提高到 65536,但这只会延长错误时间。
tomcat@tomcatserver():/home/tomcat> ulimit -a | grep open
open files (-n) 65536
我发现错误来自轮询数据库更改的 apex 应用程序。该应用程序每 3 秒轮询一次。如果我观察文件数,lsof | grep tomcat | wc-l
我可以看到应用程序打开时文件数增加,关闭时文件数保持稳定。当打开多个会话时,这个数字会迅速增长。
我可以在 server.xml 或 apex 端设置一些配置值来限制其保持打开的文件数量吗?如能提供任何帮助我将不胜感激。
笔记。
应用程序的连接正在关闭。我可以通过执行来看到这一点netstat -a | grep client_hostname
。我可以看到每 3 秒有一个额外的连接进入,然后消失。