У меня есть веб-приложение, основанное на 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, который теперь работал правильно