我有一个应用程序运行在tomcat在Ubuntu所以有时我有下面的错误:
SEVERE: Socket accept failed java.net.SocketException: Too many open files
因此,为了解决这个问题,我得到了一些参考,我修改了我的配置在**//etc/security/limits.conf**如下,并增加了我的打开文件限制。
tomcat soft nofile 10000
tomcat hard nofile 30000
现在,经过这些修改后,我启动了我的Tomcat服务,当我使用cat /proc/PID/limits检查打开文件限制时,我得到了以下值。
Max open files 4096 4096 files
因此,由于这里我的值没有反映,所以我设置了我的软限制和硬限制的值使用低于命令。
prlimit --pid xxxx --nofile=10000:30000
现在,运行PID的值已成功重新选择,但几天后,我再次遇到以下错误。
错误代码:SEVERE [http-nio-8085-ClientPoller-0]org.apache.tomcat.util.net.NioEndpoint$PollerEvent.run Failed to register socket with selector from poller
*********************************************************************************************************************************************************************************************
如果我需要在我的配置中添加任何内容,或者任何可能的解决方案,请在这里提供帮助。
提前感谢!!
1条答案
按热度按时间niwlg2el1#
/etc/security/limits.conf
文件只被PAM(参见man page)和使用PAM的服务使用,比如(图形或文本)登录服务。从Debian 10(以及Ubuntu等衍生版本)开始,Tomcat由SystemD服务文件启动。
/etc/security/limits.conf
中的值被忽略,但您可以在tomcat9.service
文件中指定它们(参见文档):在root
shell中执行以下命令:并在出现的编辑器中键入:
您收到的第二个错误是由this JVM bug引起的:使用
prlimit
更改资源限制可能会导致NPE。**备注:**如果更改文件描述符的限制,则应考虑更改连接器的
maxConnections
属性:并将其设置为一个小于该限制的值(尽管默认值
8192
似乎适合您选择的LimitNOFILE
)。