tomcat - Tomcat keystore 上的 "Too many open files"

标签 tomcat ssl

我最近开始在我们的 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/

相关文章:

java - 无法使用 Java JNDI 上下文查找访问对象

java - 使用 Maven 将 Spring 框架应用程序打包到 war

c# - 如何将我的 Azure 站点启用为 https 而不是 http?

reactjs - 为什么迁移到 https 会中断客户端和服务器之间的通信?

java - 希腊字符显示问题 Tomcat 7

java - 进程内存与堆——JVM

Tomcat 和 java.net.ServerSockets

ssl - Azure IoT 中心 MQTT 故障

ssl - 通过 HTTPS 通过其 IP 使用 Python 请求访问主机时出现问题

java - 启用 SSL 证书验证 JVM