Como soluciono o erro "java.net.BindException: endereço já em uso: JVM_Bind"?

187

No Eclipse, recebi este erro:

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

Não sei por que surgiu agora, mas correu bem apenas algumas horas atrás. Preciso reiniciar minha máquina? Como chego ao fundo disso? Agradeço qualquer dica ou conselho.

Café
fonte
1
Vi isso frequentemente em máquinas de desenvolvimento quando você está executando testes de código - Como o problema pode ser evitado?
será

Respostas:

141

Sim, você tem outro processo vinculado à mesma porta.

O TCPView (somente Windows) do Windows Sysinternals é meu aplicativo favorito sempre que tenho um erro JVM_BIND. Ele mostra quais processos estão ouvindo em qual porta. Ele também fornece um menu de contexto conveniente para interromper o processo ou fechar a conexão que está atrapalhando.

Guido Simone
fonte
um trabalho rápido em torno: Open visualização do servidor> clique duas vezes no servidor> Alterar os números de porta usados (ou seja, para Tomcat admin, HTTP / 1.1, e AJP / 1.3.)
Adrien Seja
2
@novice_developer netstaté o comando que você está procurando, com as opções -a e -p, man netstaté seu amigo para todo o resto :) #
sox Monica 28 /
1
Se o processo acima não funcionar, reinicie o PC uma vez, acho que funcionará. Começou a funcionar no meu caso.
Kumar
195

Se você sabe qual porta o processo está sendo executado, você pode digitar: lsof -i:<port>.

Por exemplo, lsof -i:8080para listar o processo (pid) em execução na porta 8080.

Então mate o processo com kill <pid>

Diego Pino
fonte
4
Sim, isso é Linux. Em seguida, tente algo equivalente no Windows. Talvez isso possa ajudar: stackoverflow.com/questions/15708/lsof-equivalent-for-windows #
Diego Pino
1
então eu estou usando Raspbian e ele diz: bash: lsof: comando não encontrado. alguma sugestão?
Mona Jalal 21/01
1
@MonaJalal hmmm não tenho certeza, mas talvez experimente algo comosudo apt-get install lsof
Coffee
@DiegoPino Estou enfrentando o mesmo erro java.net.BindException: Address already in use (Bind failed) que usei lsof -i:8080e obtive tcp6 0 0 :::8080 :::* LISTEN 106872/java. O que devo fazer ? Kill java ??
Avijit Barua 17/02/19
@AvijitBarua A identificação do processo (pid) do programa java vinculado a esta porta é 106872. Todo programa Java que você inicia se apresenta como o programa java (é a máquina virtual java que executa seu código compilado). Então, sim, você pode sair ou matar esse programa java, se não for uma ferramenta crítica (do sistema), mas seu próprio programa; dê uma olhada em um gerenciador de tarefas como htop. Talvez você tente ligar a uma porta usada por um programa válido que não deve ser eliminado.
xuiqzy 27/02
114

No windows

netstat -ano

listará todos os protocolos, portas e processos de escuta. Usar

taskkill -pid "proces to kill" /f

para matar o processo ouvindo a porta. por exemplo

 taskkill -pid 431 /f
Abhi
fonte
10
netstat -ano | encontre "número da sua porta" Use isso no Windows para portas específicas.
BlondCode
Para mim (usando o Windows 10) findnão funcionou, mas findstrfuncionou. Para evitar falsos positivos, também ajuda a acrescentar dois pontos, por exemplo netstat -ano | findstr :8080. Tendo feito isso - digamos que retornou um PID de 1234 - se você quiser procurar o nome desse processo, isso pode ser feito via tasklist /fi "pid eq 1234".
Steve Chambers
34

No Mac:

Terminal do processo da matança :kill <pid>

Encontrar pid: Terminal:lsof -i:<port>

Da resposta de Diego Pino

Hoyin
fonte
11
kill <pid> não funcionou no mac, kill -9 <PID> trabalhou comigo #
Samy Omar
33

No Ubuntu / Unix , podemos resolver esse problema em 2 etapas, conforme descrito abaixo.

  1. Tipo netstat -plten |grep java

    Isso fornecerá uma saída semelhante a:

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

    Aqui 8080está o número da porta na qual o processo java está atendendo e 9488é seu ID do processo (pid).

  2. Para liberar a porta ocupada, precisamos matar esse processo usando o killcomando

    kill -9 9488

    9488é a identificação do processo anterior. Usamos -9para forçar a parada do processo.

Sua porta agora deve estar livre e você pode reiniciar o servidor.

Bharti Rawat
fonte
Estou configurando o servidor CentOs no oceano digital. Se eu matar esse processo, como posso executar o servidor novamente?
Avijit Barua 17/02/19
Use -9 apenas se for o seu próprio programa e você não tiver dados a perder lá. Ele mata o processo de maneira impura, -15 diz ao programa para sair de si mesmo.
xuiqzy 27/02
27

(Somente Windows)

Para matar um processo, primeiro você precisa encontrar o ID do processo (pid)

Executando o comando:

netstat -ano | findstr :yourPortNumber

Como mostrado na figura abaixo

Você receberá seu ID do processo (PID). Agora, para matar o mesmo processo, execute este comando:

taskkill /pid yourid /f

insira a descrição da imagem aqui

Sufiyan Ansari
fonte
7

Você tem outro processo em execução na mesma porta.

Você pode tentar matar um dos serviços java.exe em execução no gerenciador de tarefas - ps, certifique-se de não matar o eclipse, pois ele também está listado como java.exe. Se nada mais funcionar, reiniciar sua máquina irá corrigi-lo de qualquer maneira. Parece que você não está desligando um soquete de um teste anterior. Espero que isto ajude.

javarebel
fonte
6

Para aqueles que procuram as respostas mais simples (como é o que geralmente perdemos), pare o seu projeto em execução e inicie-o novamente. Na maioria das vezes, o que fazemos é que esquecemos de interromper o projeto que executamos anteriormente e, quando o reiniciamos, ele mostra esse problema.

Também estou anexando uma foto para torná-la mais clara (eu uso o 'Spring tool suite'). Então, o que você precisa fazer é clicar no botão na extrema direita, se você deseja reiniciar o mesmo projeto ou primeiro clique no botão que é o 2º da direita para interromper o projeto e, em seguida, no botão à esquerda para executar seu projecto. Espero que isso resolva o problema de alguns dos programadores mais recentes. :)

insira a descrição da imagem aqui

Me_developer
fonte
4

Na linha do Windows CMD, encontre o ID do processo que mantém uma conexão na porta de ligação digitando o seguinte comando:

C:> netstat -a -o

-a mostra todas as conexões

-o show identificador de processo

E então encerre o processo.

CharlesX
fonte
2

Sim, como Guido Simone disse, porque outro processo está ouvindo a mesma porta. Se você está no Ubuntu, você pode simplesmente matar esse processo, dando o comando sudo kill $(sudo lsof -t -i:[port number])

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

Mas uma vez que não funcionou para mim. eu dei o comando

$ lsof -i:[port] 

e não mostra nada.

Verifiquei os contêineres do docker usando o comando, docker ps -amas nenhum deles está ativo. docker usando o comando sudo service docker stope tente novamente. Surpreendentemente, o eclipse não mostrou o erro naquele momento. Ele executou meu programa perfeitamente.

Espero que minha experiência ajude alguém.

Yasitha Bandara
fonte
2

Você precisa fechar sua porta se você for um usuário linux e digite

fuser -k 8080/tcp
Machhindra Neupane
fonte
1

A porta já está sendo usada por outro processo, como @Diego Pino disse que você pode usar lsof no unix para localizar o processo e matar o respectivo, se você estiver no Windows, use netstat -ano para obter todos os pids do processo e o portas que todo mundo adquire. procure sua porta pretendida e mate.

para ser muito fácil, basta reiniciar sua máquina, se for possível :)

Akash Yadav
fonte
1

Reinicie o PC uma vez, acho que vai funcionar. Começou a funcionar no meu caso. Mais uma coisa pode ser feita, vá para o Gerenciador de tarefas e encerre o processo.

Captura de tela para a referência.

Kumar
fonte
Por favor, não responda com um comentário / pergunta. Seria preferível se você excluísse isso.
Clijsters
1

No meu caso, o Tomcat estava sendo executado em segundo plano. Eu o instalei como um servlet externo enquanto usava o Eclipse. Com um Spring Boot no Intellij, ele possui seu próprio servidor, mas não pode ser iniciado enquanto já estiver ocupado.
No meu caso, o Tomcat inicia automaticamente, ligo o SO, por isso preciso desligá-lo manualmente:

$ sudo service tomcat stop

é claro que "tomcat" depende da versão do tomcat que você está usando.
Espero que ajude alguém.

EnGoPy
fonte
0

Eu enfrentei um problema semelhante no Eclipse quando dois consoles foram abertos quando iniciei o programa Servidor primeiro e depois o programa Cliente. Eu costumava parar o programa no console único pensando que ele havia fechado o servidor, mas apenas o cliente e não o servidor. Encontrei processos Java em execução no meu Gerenciador de tarefas. Esse problema foi resolvido fechando os programas Servidor e Cliente de seus consoles individuais (o Eclipse mostra o console do último programa ativo). Portanto, quando iniciei o programa Servidor novamente, a porta estava novamente aberta para ser capturada.

Chetan Gowda
fonte
0

Sua porta deve estar ocupada em outro processo. Para fazer o download do TCPView em https://technet.microsoft.com/en-us/sysinternals/bb897437 e finalizar o processo para a porta usada.

Se você não conhece sua porta, clique duas vezes no servidor que não está iniciando, clique em Abrir página de propriedades do servidor e clique em glassfish da coluna esquerda. Você encontrará as portas aqui.

suketup
fonte
0

(1) verifique se a porta está em uso ou não, mate esse processo

$ lsof -i: [porta]

(2) outro motivo é que a porta é usada pelo ipv6, solução:

editar /etc/sysctl.conf

adicione isso ao arquivo

net.ipv6.conf.all.disable_ipv6 = 1

então faça efeito

$ sudo sysctl -p /etc/sysctl.conf

ou apenas reinicie

tonysok
fonte
0

Isso significa que algum outro processo já está usando a porta. Caso essa porta esteja sendo usada por outros aplicativos críticos e você não queira fechar esse aplicativo, a melhor maneira é escolher qualquer outra porta que seja livre para usar.

Configure seu aplicativo para usar qualquer outra porta livre e você verá seu aplicativo funcionando.

Rakesh Burbure
fonte
0

Para janelas :

  1. Encontre o ID do processo

    netstat -nao | encontre "8080"

Ele mostrará o ID do processo como um número.

Exemplo :

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856

Aqui 18856 é o ID do processo

  1. Mate esse processo

    skillkill / PID 18856 / F

Saída : SUCESSO: O processo com o PID 18856 foi encerrado.

Aqui, usando o taskkill, você está matando o processo de ID: 18856

Para Linux / Mac :

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

Aqui você encontra o processo usando sudo lsof -t -i:8080e matando-o pelo comando sudo kill

Md. Sajedul Karim
fonte