我最近开始在我们的 Tomcat 服务器上收到一个错误:“打开的文件太多”,并且该错误继续引用用于服务器的 SSL 连接器的 keystore 文件。有谁知道这可能来自哪里?我们的服务器接收到相当数量的连接,但如果我将最大可接受连接数推到 150 以上,服务器甚至不会启动(无论出于何种原因)。有没有办法让 Tomcat 将 keystore 缓存在内存中,这样连接就不必重复从文件中读取?
最佳答案
我假设您在 Linux 上运行,因为这就是我的答案。
第一步是检查打开文件的 ulimit,并尝试在 shell 中将其设置得更高:
ulimit -n
这可能会打印 1024,这是 Linux 的“正常”用户限制。尝试设置一个更高的数字:
ulimit -n 2048
如果成功了,那就太好了。将该命令放入您的登录脚本中,您应该可以开始了。如果不是,那么您需要增加每个用户的限制。根据this document ,您要编辑的文件是 /etc/security/limits.conf
顺便说一句,您(可能)看不到这一点,因为 Tomcat 一直在读取同一个文件。 JVM 通常会打开(和内存映射)您的应用程序使用的所有 JAR 文件,并且可能还会为配置文件保留打开的文件句柄。打开 keystore 文件时恰好达到了限制。
关于tomcat - Tomcat keystore 上的 "Too many open files",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130944/