Как устранить ошибку" java.net.BindException: Address already in use: 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


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

5556   16  

16 ответов:

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

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

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

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

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

в windows

netstat -ano

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

taskkill -pid "proces to kill" /f

убить процесс прослушивания порта. е.г

 taskkill -pid 431 /f

В Mac:

убить процесс Терминал:kill <pid>

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

от Диего Пино ответ

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

 1. Use netstat -plten |grep java

это даст выход, как это

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

здесь порт нет 8080 на котором запущен процесс java. И его идентификатор процесса (pid) составляет 9488 перед java (9488/java).

2. Now to resolve the Address already in use problem you
have to kill this process using this command.

kill -9 9488

здесь: -9 для принудительной остановки и 9488 - это идентификатор процесса.

теперь снова запустите сервер.Надеюсь, этот ответ будет полезен для вас, ребята.

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

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

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

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

выполнив команду :

netstat -ano | findstr :yourPortNumber

As shown in picture below

вы получите свой идентификатор процесса (PID), теперь, чтобы убить тот же процесс, выполните эту команду:

taskkill /pid yourid /f

enter image description here

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

C:> netstat-a-o

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

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

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

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

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

enter image description here

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

пример: sudo kill $(sudo lsof -t -i:8080)

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

$ lsof -i:[port] 

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

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

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

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

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

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

Screenshot for the reference.

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

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

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

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

$ lsof-i: [port]

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

edit / etc / sysctl.conf

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

net.протокол IPv6.конф.все.disable_ipv6 = 1

тогда сделайте это эффект

$ sudo sysctl-p /etc/sysctl.conf

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

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

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

Comments

    Ничего не найдено.