Вопрос или проблема
Я пытался запустить Apache Tomcat 9.0.97 с Java OpenJDK-11.0.25+9, и все казалось в порядке. После того как кто-то что-то изменил, я заметил, что сервер застревает в бесконечном цикле при загрузке.
Чтобы устранить неполадки, я удалил все war-файлы и добавил папки в webapp, а затем запустил сервер, следя за файлом catalina.out.
Я вижу эту серьезную ошибку:
SEVERE [main] org.apache.catalina.core.StandardServer.await Не удалось создать сокет для завершения работы сервера по адресу [localhost] и порту [8005] (основной порт [8005] и смещение [0])
java.net.BindException: Адрес уже используется (Не удалось привязать)
at java.base/java.net.PlainSocketImpl.socketBind(Нативный метод)
at java.base/java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:452)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:395)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:257)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:537)
at org.apache.catalina.startup.Catalina.await(Catalina.java:825)
at org.apache.catalina.startup.Catalina.start(Catalina.java:773)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Нативный метод)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
У вас есть решение для этого?
ОК, решение заключалось в том, чтобы завершить и убить все процессы Tomcat, затем проверить каждый файл /opt/tomcat*/conf/server.xml и найти другой, использующий этот порт 8005 для завершения работы, а затем настроить каждый Tomcat на использование подходящего порта, отличного от других.
Ответ или решение
Вопрос о том, почему Apache Tomcat 9.0.97 заходит в бесконечный цикл при запуске, часто сводится к ошибке "Failed to create server shutdown socket on address [localhost] and port [8005]". Эта проблема возникает из-за конфликта портов, когда порт, на который Tomcat пытается установить связь, уже используется другим процессом или экземпляром Tomcat. Давайте рассмотрим проблему и пути её решения подробнее.
Проблема
Ваша ошибка выглядит следующим образом:
SEVERE [main] org.apache.catalina.core.StandardServer.await Failed to create server shutdown socket on address [localhost] and port [8005] (base port [8005] and offset [0])
java.net.BindException: Address already in use (Bind failed)
Это сообщение указывает на то, что Tomcat не может создать серверный сокет для завершения работы на порту 8005, потому что данный порт уже занят. Такое может произойти, если вы имеете несколько экземпляров Tomcat, работающих одновременно, или если предыдущий экземпляр был неправильно завершен и всё ещё занимает данный порт.
Способы решения
-
Определение работающих процессов Tomcat:
Прежде всего, необходимо убедиться, что нет запущенных процессов Tomcat. Используйте следующую команду в терминале:ps -ef | grep tomcat
Если увидите запущенные процессы, завершите их с помощью команды
kill
. Например:kill -9 <PID>
Где
<PID>
— это идентификатор процесса Tomcat. -
Проверка конфигурации:
После завершения всех процессов, проверьте конфигурацию всех экземпляров Tomcat, особенно файлserver.xml
, который находится в директории/conf
. Ищите строки, где указаны порты, особенно<Server port="8005" ...>
. Убедитесь, что каждый экземпляр Tomcat использует уникальный порт. -
Изменение портов:
Если у вас несколько экземпляров Tomcat, измените конфигурацию каждого, чтобы они использовали разные порты для завершения работы. Например, можно установить 8006 для второго экземпляра, 8007 для третьего и т.д. -
Проверка других приложений:
Если проблема сохраняется, возможно, что другой процесс (не Tomcat) использует порт 8005. Чтобы посмотреть, что занимает порт, можно использовать команду:lsof -i :8005
Эта команда покажет вам, какие процессы используют данный порт. Если это не Tomcat, вам необходимо либо остановить это приложение, либо изменить настройки Tomcat.
-
Перезапуск службы:
После внесения правок и завершения конфликтующих процессов перезапустите Tomcat. Используйте команды, характерные для вашей системы, или используйте скрипты управления, предоставляемые в дистрибутиве Tomcat.
Заключение
Ошибка, с которой вы столкнулись, часто присуща многим пользователям, особенно при работе с несколькими экземплярами Tomcat. Ключ к решению данной проблемы — это тщательная проверка портов и корректное управление процессами. Применение предложенных выше шагов позволит вам успешно устранить проблему и запустить ваш сервер без бесконечных циклов загрузки. Убедитесь также, что у вас установлены последние обновления как для Java, так и для Tomcat, так как большинство обновлений могут содержать исправления, повышающие стабильность и производительность сервера.