Как устранить ошибку "java.net.BindException: Address уже используется: JVM_Bind"?

В Eclipse я получил эту ошибку:

run:
     [java] Error creating the server socket.
     [java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
     [java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
     [java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds

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

Ответ 1

Да, у вас есть другой процесс, связанный с одним и тем же портом.

TCPView (только для Windows) из Windows Sysinternals - мое любимое приложение, когда у меня есть ошибка JVM_BIND. Он показывает, какие процессы прослушивают порт. Он также предоставляет удобное контекстное меню, чтобы либо убить процесс, либо закрыть соединение, которое мешает.

Ответ 2

Если вы знаете, какой порт работает, вы можете ввести: lsof -i:<port>.

Например, lsof -i:8080, чтобы просмотреть процесс (pid), запущенный на порту 8080.

Затем запустите процесс с помощью kill <pid>

Ответ 3

В окнах

netstat -ano

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

taskkill -pid "proces to kill" /f

чтобы убить процесс, прослушивающий порт. например

 taskkill -pid 431 /f

Ответ 4

В Mac:

Процесс убийства Терминал: kill <pid>

Найти pid: Терминал: lsof -i:<port>

От Диего Пино отвечу

Ответ 5

В Ubuntu/Unix мы можем решить эту проблему в 2 этапа, как описано ниже.

  1. Тип netstat -plten |grep java

    Это даст вывод, похожий на:

    tcp   0   0 0.0.0.0:8080   0.0.0.0:*  LISTEN   1001  76084  9488/java       
    

    Здесь 8080 - номер порта, на котором слушает процесс Java, а 9488 - его идентификатор процесса (pid).

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

    kill -9 9488
    

    9488 - это идентификатор процесса из предыдущего. Мы используем -9, чтобы принудительно остановить процесс.

Теперь ваш порт должен быть свободен, и вы можете перезагрузить сервер.

Ответ 6

(Только для Windows)

Чтобы убить процесс, сначала нужно найти идентификатор процесса (pid)

Запустив команду:

netstat -ano | findstr :yourPortNumber

As shown in picture below

Вы получите идентификатор процесса (PID). Чтобы убить тот же процесс, выполните следующую команду:

taskkill /pid yourid /f

enter image description here

Ответ 7

У вас есть другой процесс, выполняющийся на том же порту.

Вы можете попробовать убить одну из java.exe-служб, запущенных в вашем диспетчере задач - ps убедитесь, что вы не убиваете eclipse, так как это указано как java.exe. Если ничего не работает, перезапуск вашей машины все равно исправит. Похоже, вы не закрываете сокет из предыдущего теста. Надеюсь, это поможет.

Ответ 8

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

C: > netstat -a -o

-a показать все соединения

-o показать идентификатор процесса

И затем Завершить процесс.

Ответ 9

Для тех, кто ищет самый простой из ответов (поскольку это то, что мы обычно пропускаем), просто запустите свой запущенный проект и запустите его снова. В большинстве случаев мы забываем остановить проект, который мы запускали раньше, и когда мы повторно запускаем проект, он показывает такую ​​проблему.

Я также прикрепляю фотографию, чтобы сделать ее более ясной (я использую "набор инструментов Spring" ). Так что вам нужно сделать либо щелкнуть кнопку в крайнем правом углу, если вы хотите перезапустить тот же проект или сначала нажать на кнопку, которая является 2-м справа, чтобы остановить ваш проект, а затем кнопку в крайнем левом углу ваш проект. Надеюсь, это решит проблему нескольких новых программистов.:)

введите описание изображения здесь

Ответ 10

Да, как сказал Гвидо Симоне, потому что другой процесс прослушивает тот же порт. Если вы в Ubuntu, вы можете просто убить этот процесс, выдавая команду sudo kill $(sudo lsof -t -i:[port number])

ex: sudo kill $(sudo lsof -t -i:8080)

Но как только это не сработало для меня. я дал команду

$ lsof -i:[port] 

и ничего не показывает.

Я проверил контейнеры докеров с помощью команды docker ps -a, но не из них. Все контейнеры прекратились (но я помню, я остановил один контейнер, который использовался один и тот же порт несколько минут назад.) Чтобы убедиться, что докер не является причиной, я останавливаю весь процесс докеров с помощью команды sudo service docker stop и повторю попытку. Удивительно, что затмение не показало ошибки в то время. Это отлично работает моя программа.

Надеюсь, мой опыт поможет кому-то.

Ответ 11

Порт уже используется каким-то другим процессом, так как @Diego Pino сказал, что вы можете использовать lsof в unix, чтобы найти процесс и убить соответствующий, если вы на окнах, используйте netstat -ano, чтобы получить все pids процесс и порты, которые все приобретают. найдите свой предполагаемый порт и убейте.

чтобы быть очень просто, просто перезагрузите компьютер, если это возможно:)

Ответ 12

Перезагрузите компьютер один раз, я думаю, что он будет работать. Это начало работать в моем случае. Еще одну вещь можно сделать, перейдите в диспетчер задач и завершите процесс.

Screenshot for the reference.

Ответ 13

Я столкнулся с аналогичной проблемой в Eclipse, когда две консоли были открыты при первом запуске программы Server, а затем в программе клиента. Раньше я останавливал программу в единственной консоли, думая, что она закрыла сервер, но закрыла клиент, а не сервер. Я нашел запущенные процессы Java в диспетчере задач. Эта проблема была решена путем закрытия как серверных, так и клиентских программ с их отдельных консолей (Eclipse показывает консоль последней активной программы). Поэтому, когда я снова запустил программу Server, порт снова был открыт для захвата.

Ответ 14

В некоторых других процессах ваш порт должен быть занят. Таким образом, вы можете загрузить TCPView на https://technet.microsoft.com/en-us/sysinternals/bb897437 и убить процесс для используемого порта.

Если вы не знаете свой порт, дважды щелкните на сервере, который не запускается, и нажмите "Открыть страницу свойств сервера" и нажмите на стеклянную рыбку слева. Здесь вы найдете порты.

Ответ 15

(1) проверьте, что порт используется или нет, убейте этот процесс

$lsof -i: [порт]

(2) Другая причина заключается в том, что порт используется ipv6, решение:

изменить /etc/sysctl.conf

добавьте это в файл

net.ipv6.conf.all.disable_ipv6 = 1

затем сделайте эффект

$sudo sysctl -p/etc/sysctl.conf

или просто перезагрузитесь

Ответ 16

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

Настройте ваше приложение на использование любого другого свободного порта, и вы увидите, что ваше приложение работает.

Ответ 17

Вам нужно закрыть свой порт если вы являетесь пользователем Linux, введите

fuser -k 8080/tcp

Ответ 18

В моем случае Tomcat работал в фоновом режиме. Я установил его как внешний сервлет при использовании Eclipse. С помощью Spring Boot в Intellij у него есть собственный сервер, но он не может запуститься, пока он уже занят.
В моем случае Tomcat запускается автоматически, я включаю свою ОС, поэтому мне нужно выключить его вручную:

$ sudo service tomcat stop

конечно "tomcat" зависит от того, какую версию tomcat вы используете.
Надеюсь, это может кому-то помочь.