it-swarm.com.ru

Как устранить ошибку "Java.net.BindException: адрес уже используется: 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

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

138
Coffee

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

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

112
Guido Simone

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

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

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

159
Diego Pino

В окнах 

netstat -ano

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

taskkill -pid "proces to kill" /f

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

 taskkill -pid 431 /f
88
Abhi

В Mac: 

Процесс уничтожения Терминал: kill <pid>

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

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

29
Hoyin

В 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, чтобы принудительно остановить процесс. 

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

22
Bharti Rawat

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

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

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

netstat -ano | findstr :yourPortNumber

 As shown in picture below

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

taskkill /pid yourid /f

 enter image description here

12
Sufiyan Ansari

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

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

7
javarebel

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

C:> netstat -a -o

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

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

А потом прекратить процесс.

4
CharlesX

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

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

 enter image description here

3
Learner

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

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

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

$ lsof -i:[port] 

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

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

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

2
Yasitha Bandara

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

 Screenshot for the reference.

1
Kumar

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

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

1
Akash Yadav

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

$ lsof -i: [порт]

(2) другая причина - порт используется ipv6, решение:

edit /etc/sysctl.conf  

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

net.ipv6.conf.all.disable_ipv6 = 1

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

$ Sudo sysctl -p /etc/sysctl.conf  

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

0
tonysok

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

0
Chetan Gowda

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

fuser -k 8080/tcp
0
Machhindra Neupane

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

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

0
Suketu

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

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

0
Rakesh Burbure