Назад | Перейти на главную страницу

java.io.IOException: слишком много открытых файлов на сервере tomcat

У меня есть веб-приложение, основанное на JAVA (GWT Framework). Я разместил свое веб-приложение на Redhat Linux Server 6.0 с помощью Tomcat 8.0.9 перед http-сервером apache, подключенным с помощью коннектора AJP и JDK 8. Всякий раз, когда 20+ пользователей обращаются к моему веб-сайту, tomcat терпит неудачу, и я проверил файл журналов, я получил это выполнение

19-Oct-2015 12:38:15.350 SEVERE [ajp-nio-8009-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed
 java.io.IOException: Too many open files
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241)
    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:688)
    at java.lang.Thread.run(Thread.java:745)

Веб-приложение использует:

База данных : couchdb 1.5 (работает на машине ec-2 с 4 ГБ ОЗУ)

Искать: elasticsearch 1.0 (работает на машине ec-2 с 4 ГБ ОЗУ)

Кот : Tomcat 8.0 перед сервером apache, подключенным с помощью коннектора ajp (работает на машине ec-2 с 8 ГБ ОЗУ)

Я много искал и нашел решение, чтобы изменить значения fs.file-max = 200000 и soft file и hard file limit на 65535, но все же эта ошибка возникает, и tomcat перестает отвечать. Затем мне нужно перезапустить машину tomcat ec-2, после чего только приложение начнет работать правильно.

Я не мог понять, почему эта проблема возникает так часто?

Мои клиенты раздражаются из-за этой проблемы. Пожалуйста, помогите мне решить эту проблему

Попробуйте увеличить лимит открытых файлов, как показано ниже (в /etc/security/limits.conf):

*         hard    nofile      65535
*         soft    nofile      200000

и перезапустите свои службы.

Вы можете проверить лимиты запущенного процесса:

cat /proc/xxxx/limits

где xxxx это пид процесса

Вам нужно проверить процесс tomcat, как показано ниже: -

$ ps aux | grep apache:

Я тоже испытывал то же самое, но проверка выше прошла нормально. Мне пришлось сделать резервную копию некоторых файлов в каталоге журналов tomcat. Затем я принудительно убил процесс tomcat, как показано ниже: -

kill -9 <tomcat-process-id>

а затем перезапустил tomcat, который теперь работал правильно