Перейти к основному содержимому

Tomcat java.net.BindException: адрес уже используется, ошибка в Java

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы рассмотрим, что вызывает распространенную ошибку java.net.BindingException: ошибка «Адрес уже используется » и как мы можем с ней справиться.

2. Когда возникает ошибка?

Как известно, сервер Apache Tomcat по умолчанию использует порт 8080.

Номера портов варьируются от 0 до 65535, однако в любой момент времени порт может быть занят только одним приложением .

В исключении указано, что приложение пытается использовать порт, который уже занят каким-то другим процессом, или мы неправильно остановили сервер Tomcat.

3. Диагностика

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

3.1. Обнаружение конфликта

В этом случае нам нужно выяснить, какое приложение использует порт.

Команду netstat можно использовать для обнаружения текущих соединений TCP/IP.

Ниже приведены команды, которые можно использовать для поиска и уничтожения процесса в разных средах.

В Windows последний столбец вывода даст нам идентификатор процесса службы, работающей в настоящее время на 8080:

netstat -ano | find "8080"

Выход:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376

Здесь 21376 — это идентификатор процесса, который прослушивает порт 8080.

В среде Unix/Linux :

netstat -pant | grep "8080"

Выход:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376

То же, что вывод Windows. Здесь 21376 — это идентификатор процесса, который прослушивает порт 8080.

В Mac OS X:

lsof -t -i :8080

Выход:

21376

Он будет отображать только PID.

3.2. Запуск сервера на другом порту

Если мы знаем, какой процесс выполняется, почему он работает и что он должен работать на этом порту, мы можем изменить порт, на котором пытается работать наше серверное приложение.

Чтобы изменить порт Tomcat, нам нужно отредактировать файл server.xml . Сделать это:

  • Откройте папку tomcat/conf
  • редактировать server.xml
  • замените порт разъема на новый порт
  • перезапустить сервер кота

Файл server.xml выглядит так:

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" redirectPort="8443" />

Теперь Tomcat будет работать на настроенном порту.

3.3. Уничтожение работающей службы

Чтобы остановить запущенный процесс, мы можем использовать команду kill . ** **

Используя идентификатор процесса, который мы нашли в 3.1., нам потребуются разные команды в зависимости от используемой операционной системы.

В среде Windows:

taskkill /F /PID 21376

В среде Unix/Linux:

kill - 21376

Среда Mac OS X:

kill -9 21376

4. Вывод

Как упоминалось в начале статьи, ошибка java.net.BindingException является распространенной, но легко устраняемой.

Основная трудность заключается в том, чтобы найти конфликтующую службу, используя порт с терминальным приложением netstat , а затем определить соответствующий план действий.

После обнаружения исправить легко.