我有一個應用程式在Ubuntu的tomcat上運行,所以有時我有以下錯誤:
SEVERE: Socket accept failed java.net.SocketException: 太多的開放檔案
因此,為了解決這個問題,我得到了一些參考資料,我在/etc/security/limits.conf中修改了我的配置,如下所示,并增加了我的開放檔案限制。
tomcat soft nofile 10000
tomcat hard nofile 30000
經過這些修改后,我在Tomcat上啟動了我的服務,當我使用cat /proc/PID/limits檢查打開檔案的限制時,我得到了以下數值。
最大打開檔案數 4096 4096檔案
所以在這里我的值沒有反映出來,所以我用下面的命令設定了我的軟限制和硬限制的值。
prlimit --pid xxxx --nofile=10000:30000
現在,運行中的PID的值被成功地反映出來了,但幾天后,我又面臨以下錯誤。
SEVERE [http-nio-8085-ClientPoller-0]org.apache.tomcat.util.net.NioEndpoint$PollerEvent.run 未能用poller的選擇器注冊socket** java.lang.NullPointerException
在sun.nio.ch.EPollArrayWrapper.isEventsHighKilled(EPollArrayWrapper.java:174)
在此,請您幫助我在配置中是否需要添加任何東西。或者是否有什么可能的解決方案。
預先感謝!
uj5u.com熱心網友回復:
/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
然后在出現的編輯器中輸入:
[服務]
LimitNOFILE=10000
你收到的第二個錯誤是由這個JVM錯誤引起的:使用prlimit改變資源限制會引起NPE。
注意:如果你改變了檔案描述符的限制,你應該考慮改變連接器的maxConnections屬性:
< Connector port="8080" maxConnections="8192" />
并將其設定為一個小于限制的值(盡管默認的8192似乎適合你選擇的LimitNOFILE)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319425.html
標籤:
下一篇:Maven過濾--變數的替換
