En Eclipse, recibí este error:
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
No estoy seguro de por qué surgió ahora, pero funcionó bien hace solo unas horas. ¿Necesito reiniciar mi máquina? ¿Cómo llego al fondo? Agradezco cualquier consejo o consejo.
Respuestas:
Sí, tiene otro proceso vinculado al mismo puerto.
TCPView (solo Windows) de Windows Sysinternals es mi aplicación favorita cada vez que tengo un error JVM_BIND. Muestra qué procesos están escuchando en qué puerto. También proporciona un menú contextual conveniente para eliminar el proceso o cerrar la conexión que se interpone en el camino.
fuente
netstat
es el comando que estás buscando, con las opciones -a y -p,man netstat
es tu amigo para todo lo demás :)Si sabe en qué puerto se está ejecutando el proceso, puede escribir:
lsof -i:<port>
.Por ejemplo,
lsof -i:8080
para enumerar el proceso (pid) que se ejecuta en el puerto 8080.Luego mata el proceso con
kill <pid>
fuente
sudo apt-get install lsof
java.net.BindException: Address already in use (Bind failed)
que usélsof -i:8080
y obtuvetcp6 0 0 :::8080 :::* LISTEN 106872/java
. Qué tengo que hacer ? Matar a Java?htop
. Tal vez intente vincularse a un puerto utilizado por un programa válido que no debería eliminarse.En ventanas
enumerará todos los protocolos, puertos y procesos de escucha. Utilizar
para matar el proceso escuchando el puerto. p.ej
fuente
find
no funcionó perofindstr
sí. Para evitar falsos positivos también ayuda a anteponer un colon, por ejemplonetstat -ano | findstr :8080
. Una vez hecho esto, digamos que devolvió un PID de 1234, si desea buscar el nombre de este proceso, puede hacerlo a través detasklist /fi "pid eq 1234
".En Mac:
Terminal de proceso de muerte :
kill <pid>
Encuentra pid: Terminal:
lsof -i:<port>
De Diego Pino respuesta
fuente
En Ubuntu / Unix podemos resolver este problema en 2 pasos como se describe a continuación.
Tipo
netstat -plten |grep java
Esto dará un resultado similar a:
Aquí
8080
está el número de puerto en el que el proceso de Java está escuchando y9488
es su id de proceso (pid).Para liberar el puerto ocupado, tenemos que matar este proceso usando el
kill
comando.9488
es la identificación del proceso de antes. Usamos-9
para forzar la detención del proceso.Su puerto ahora debería estar libre y puede reiniciar el servidor.
fuente
(Solo Windows)
Para matar un proceso, primero debe encontrar el Id. De proceso (pid)
Al ejecutar el comando:
Obtendrá su Id. De proceso (PID). Ahora, para eliminar el mismo proceso, ejecute este comando:
fuente
Tiene otro proceso ejecutándose en el mismo puerto.
Puede intentar matar uno de los servicios java.exe que se ejecutan en su administrador de tareas: ps asegúrese de no matar a eclipse, ya que también aparece como java.exe. Si nada más funciona, reiniciar su máquina lo arreglará de todos modos. Parece que no está apagando un socket de una prueba anterior. Espero que esto ayude.
fuente
Para aquellos que buscan la respuesta más simple (ya que eso es lo que generalmente extrañamos), simplemente detenga su proyecto en ejecución y comience nuevamente. La mayoría de las veces lo que hacemos es olvidarnos de detener el proyecto que ejecutamos antes y cuando volvemos a ejecutar el proyecto, se muestra un problema.
También adjunto una foto para que quede más clara (uso 'Spring tool suite'). Entonces, lo que debe hacer es hacer clic en el botón en el extremo derecho, si desea reiniciar el mismo proyecto o primero en el botón que está en el segundo lugar desde la derecha para detener su proyecto y luego el botón en el extremo izquierdo para ejecutar tu proyecto. Espero que esto resuelva el problema de algunos de los programadores más nuevos. :)
fuente
En la línea CMD de Windows, encuentre el ID de proceso que mantiene una conexión en el puerto de enlace ingresando el siguiente comando:
C:> netstat -a -o
-a mostrar todas las conexiones
-o mostrar identificador de proceso
Y luego terminar el proceso.
fuente
Sí, como dijo Guido Simone porque otro proceso está escuchando el mismo puerto. Si estás en Ubuntu, simplemente puedes matar ese proceso dando un comando
sudo kill $(sudo lsof -t -i:[port number])
ex:
sudo kill $(sudo lsof -t -i:8080)
Pero una vez no funcionó para mí. di la orden
Y no muestra nada.
docker ps -a
Revisé mis contenedores de Docker usando el comando pero ninguno de ellos vivo. Todos los contenedores se han detenido (pero recuerdo, detuve un contenedor que se usó en el mismo puerto hace unos minutos). Para asegurarme de que Docker no sea la razón, dejo todo proceso de docker usando el comandosudo service docker stop
e intente nuevamente. Sorprendentemente, el eclipse no mostró el error en ese momento. Ejecuta mi programa perfectamente.Espero que mi experiencia ayude a alguien.
fuente
Debe cerrar su puerto si es un usuario de Linux, luego escriba
fuente
El puerto ya está siendo utilizado por algún otro proceso ya que @Diego Pino dijo que puedes usar lsof en Unix para localizar el proceso y eliminar el respectivo, si estás en Windows usa netstat -ano para obtener todos los pids del proceso y puertos que todos adquieren. busque su puerto previsto y mate.
para ser muy fácil, simplemente reinicie su máquina, si eso es posible :)
fuente
Reinicie la PC una vez, creo que funcionará. Comenzó a funcionar en mi caso. Una cosa más se puede hacer ir al Administrador de tareas y finalizar el proceso.
fuente
En mi caso, Tomcat se estaba ejecutando en segundo plano. Lo he instalado como un servlet externo mientras uso Eclipse. Con un Spring Boot en Intellij tiene su propio servidor pero no puede iniciarse mientras ya está ocupado.
En mi caso, Tomcat se inicia automáticamente, enciendo mi sistema operativo, es por eso que necesito apagarlo manualmente:
por supuesto, "tomcat" depende de la versión de tomcat que esté utilizando.
Espero que pueda ayudar a alguien.
fuente
Me enfrenté a un problema similar en Eclipse cuando se abrieron dos consolas cuando comencé primero el programa Servidor y luego el programa Cliente. Solía detener el programa en la consola única pensando que había cerrado el servidor, pero solo había cerrado el cliente y no el servidor. Encontré procesos Java en ejecución en mi Administrador de tareas. Este problema se resolvió cerrando los programas Servidor y Cliente desde sus consolas individuales (Eclipse muestra la consola del último programa activo). Entonces, cuando volví a iniciar el programa Servidor, el puerto estaba nuevamente abierto para ser capturado.
fuente
Su puerto debe estar ocupado en algún otro proceso. Para que pueda descargar TCPView en https://technet.microsoft.com/en-us/sysinternals/bb897437 y eliminar el proceso para el puerto usado.
Si no conoce su puerto, haga doble clic en el servidor que no se está iniciando y haga clic en Abrir página de propiedades del servidor y haga clic en glassfish desde la columna izquierda. Encontrarás los puertos aquí.
fuente
(1) verifique que el puerto esté en uso o no, elimine ese proceso
$ lsof -i: [puerto]
(2) otra razón es que el puerto es utilizado por ipv6, solución:
editar /etc/sysctl.conf
agregue esto al archivo
net.ipv6.conf.all.disable_ipv6 = 1
entonces hazlo efecto
$ sudo sysctl -p /etc/sysctl.conf
o simplemente reiniciar
fuente
Significa que algún otro proceso ya está utilizando el puerto. En caso de que este puerto esté siendo utilizado por otras aplicaciones críticas y no desee cerrar esa aplicación, la mejor manera es elegir cualquier otro puerto que sea de uso gratuito.
Configure su aplicación para usar cualquier otro puerto que sea gratuito y verá que su aplicación funciona.
fuente
Para ventanas :
Encuentra la identificación del proceso
netstat -nao | encontrar "8080"
Le mostrará la ID del proceso como un número.
Ejemplo :
Aquí 18856 es la identificación del proceso
Mata ese proceso
taskkill / PID 18856 / F
Salida : ÉXITO: El proceso con PID 18856 ha finalizado.
Aquí, usando taskkill, está eliminando el ID del proceso: 18856
Para linux / Mac :
Aquí encontrarás el proceso usándolo
sudo lsof -t -i:8080
y eliminándolo mediante el comando sudo killfuente