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
, а затем определить соответствующий план действий.
После обнаружения исправить легко.