jvm Tomcat中出现错误“无法使用轮询器中的选择器注册套接字”

tjvv9vkg  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个应用程序运行在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*********************************************************************************************************************************************************************************************
如果我需要在我的配置中添加任何内容,或者任何可能的解决方案,请在这里提供帮助。
提前感谢!!

niwlg2el

niwlg2el1#

/etc/security/limits.conf文件只被PAM(参见man page)和使用PAM的服务使用,比如(图形或文本)登录服务。
从Debian 10(以及Ubuntu等衍生版本)开始,Tomcat由SystemD服务文件启动。/etc/security/limits.conf中的值被忽略,但您可以在tomcat9.service文件中指定它们(参见文档):在root shell中执行以下命令:

systemctl edit tomcat9.service

并在出现的编辑器中键入:

[Service]
LimitNOFILE=10000

您收到的第二个错误是由this JVM bug引起的:使用prlimit更改资源限制可能会导致NPE。

**备注:**如果更改文件描述符的限制,则应考虑更改连接器的maxConnections属性:

<Connector port="8080" maxConnections="8192" />

并将其设置为一个小于该限制的值(尽管默认值8192似乎适合您选择的LimitNOFILE)。

相关问题