Ошибка "java.net.SocketException: слишком много открытых файлов" на этапе развертывания в jboss-portal-2.7.2
При запуске jboss-portal-2.7.2 в какой-то момент в сообщении журнала:
2013-01-30 20:32:02,541 ERROR [org.apache.tomcat.util.net.JIoEndpoint] Socket accept failed
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:309)
at java.lang.Thread.run(Thread.java:662)
В папке deploy всего 20 военных модулей. Какие-либо решения?
2 ответа
Увеличьте ulimit на вашем сервере для пользователя, запускающего tomcat.
Чтобы проверить ulimit:
ulimit -n
Чтобы увеличить текущую сессию:
ulimit -n 102400
Вы можете вносить постоянные изменения, редактируя /etc/security/limits.conf
,
Это сообщение в основном означает, что вы достигли предела максимального количества файлов, которое вы можете открыть, как установлено вашей ОС.
Правильный способ решить эту проблему - диагностировать выход lsof -p <jboss_java_pid>
и выяснить, что способствует открытию этих многих файлов. Затем действуйте соответственно для решения.
Быстрое решение проблемы может заключаться в том, чтобы увеличить глобальный максимальный лимит файлов в вашей ОС или увеличить лимит файлов для пользователя или для обоих. Например, в Fedora это можно установить в /proc/sys/file-max
файл для глобального максимума файла и /etc/security/limits.conf
для пользовательского лимита.