Comment résoudre l'erreur" java.net.BindException: Adresse déjà utilisée: JVM Bind"?
Dans Eclipse, j'ai eu cette erreur:
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
Je ne sais pas pourquoi il est apparu maintenant, mais il a bien fonctionné il y a quelques heures. Dois-je redémarrer mon ordinateur? Comment puis-je aller au fond des choses? J'apprécie tous les conseils ou conseils.
16 answers
Oui, vous avez un autre processus lié au même port.
TCPView (Windows uniquement) de Windows Sysinternals est mon application préférée chaque fois que j'ai une erreur JVM_BIND. Il montre quels processus écoutent sur quel port. Il fournit également un menu contextuel pratique pour tuer le processus ou fermer la connexion qui gêne.
Si vous savez quel port le processus est en cours d'exécution, vous pouvez taper:
lsof -i:<port>
.
Par exemple, lsof -i:8080
, pour lister le processus (pid) s'exécutant sur le port 8080.
, Puis tuer le processus avec kill <pid>
Dans Windows
netstat -ano
Liste tous les protocoles, ports et processus d'écoute . Utiliser
taskkill -pid "proces to kill" /f
Pour tuer le processus en écoutant le port. par exemple
taskkill -pid 431 /f
Dans Mac:
Processus de destruction
Terminal: kill <pid>
Trouver pid:
Terminal: lsof -i:<port>
De Diego Pino réponse
Dans Ubuntu/Unix nous pouvons résoudre ce problème en effectuant 2 étapes comme décrit ci-dessous.
1. Use netstat -plten |grep java
Il donnera une sortie comme ceci
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/java
Ici le port no est 8080 à quel processus java est en cours d'exécution. Et son identifiant de processus (pid) est 9488
en face de 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
Ici: -9 pour arrêter et forcely 9488 est l'identifiant du processus.
Maintenant, exécutez à nouveau le serveur.J'espère que cette réponse le fera utile pour vous les gars.
Vous avez un autre processus en cours d'exécution sur le même port.
Vous pouvez essayer de tuer l'un des java.les services exe s'exécutant dans votre gestionnaire de tâches - ps assurez-vous de ne pas tuer eclipse car cela est répertorié comme java.exe ainsi. Si rien d'autre ne fonctionne, le redémarrage de votre machine le corrigera de toute façon. Il semble que vous n'arrêtiez pas un socket d'un test précédent. Espérons que cette aide.
(Windows Uniquement)
Pour tuer un processus, vous devez d'abord trouver l'Id de Processus (pid)
En exécutant la commande :
netstat -ano | findstr :yourPortNumber
Vous obtiendrez votre Id de processus (PID), Maintenant pour tuer le même processus exécutez cette commande:
taskkill /pid yourid /f
Dans la ligne Windows CMD, recherchez l'ID de processus qui contient une connexion sur le port de liaison en entrant la commande suivante:
C:> netstat -a-o
-un afficher toutes les connexions
-o afficher l'identifiant du processus
Puis Terminent le processus.
Pour ceux qui recherchent la la plus simple des réponses (car c'est ce qui nous manque habituellement), arrêtez simplement votre projet en cours d'exécution et recommencez-le. La plupart du temps, ce que nous faisons, c'est que nous oublions d'arrêter le projet que nous avons exécuté plus tôt et lorsque nous le relançons, il montre un tel problème.
Je joins également une photo pour la rendre plus claire (j'utilise 'Spring tool suite'). Donc, ce que vous devez faire est de cliquer sur le bouton à l'extrême droite, si vous voulez relancer le même projet ou cliquez d'abord sur le bouton qui est 2ème à partir de la droite pour arrêter votre projet, puis sur le bouton à l'extrême gauche pour exécuter votre projet. J'espère que cela résoudra le problème de quelques-uns des nouveaux programmeurs. :)
Oui, comme Guido Simone l'a dit parce qu'un autre processus écoute le même port.Si vous êtes dans Ubuntu Vous pouvez simplement tuer ce processus en donnant la commande
sudo kill $(sudo lsof -t -i:[port number])
Ex: sudo kill $(sudo lsof -t -i:8080)
Mais une fois cela n'a pas fonctionné pour moi. j'ai donné la commande
$ lsof -i:[port]
Et cela ne montre rien.
J'ai vérifié mes conteneurs docker à l'aide de la commande
docker ps -a
mais non d'entre eux vivants.Tous les conteneurs se sont arrêtés
(mais je me souviens, j'ai arrêté un conteneur qui a été utilisé même port il y a quelques minutes.). Pour s'assurer que docker n'est pas la raison,j'arrête tout le processus docker en utilisant la commande sudo service docker stop
et réessaie.
Étonnamment, eclipse n'a pas montré l'erreur à ce moment-là .Il exécute parfaitement mon programme.
J'espère que mon expérience aidera quelqu'un.
Le port est déjà utilisé par un autre processus comme @Diego Pino a dit que vous pouvez utiliser lsof sur unix pour localiser le processus et tuer le processus respectif, si vous êtes sous Windows, utilisez netstat-ano pour obtenir tous les PID du processus et les ports que tout le monde acquiert. recherchez votre port prévu et tuer.
Pour être très facile, redémarrez simplement votre machine, si c'est possible:)
Redémarrez le PC une fois, je pense que cela fonctionnera. Il a commencé à travailler dans mon cas. Une autre chose peut être faite aller au Gestionnaire des tâches et mettre fin au processus.
J'ai rencontré un problème similaire dans Eclipse lorsque deux consoles ont été ouvertes lorsque j'ai démarré le programme serveur, puis le programme Client. J'avais l'habitude d'arrêter le programme dans la console unique en pensant qu'il avait fermé le serveur, mais il n'avait fermé que le client et non le serveur. J'ai trouvé des processus Java en cours d'exécution dans mon gestionnaire de tâches. Ce problème a été résolu en fermant les programmes serveur et client de leurs consoles individuelles(Eclipse affiche la console du dernier programme actif). Lorsque j'ai commencé à le programme du serveur à nouveau, le port était à nouveau ouvert pour être capturé.
Votre port doit être occupé dans un autre processus. Vous pouvez donc télécharger TCPView sur https://technet.microsoft.com/en-us/sysinternals/bb897437 et tuer le processus pour le port utilisé.
Si vous ne connaissez pas votre port, double-cliquez sur le serveur qui ne démarre pas et cliquez sur Ouvrir la page des propriétés du serveur et cliquez sur glassfish dans la colonne de gauche. Vous trouverez les ports ici.
(1) vérifiez que le port est utilisé ou non, tuez ce processus
$ lsof-i:[port]
(2) une autre raison est que le port est utilisé par ipv6, solution:
Modifier /etc/sysctl.conf
Ajoutez ceci au fichier
Net.ipv6.conf.tout.disable_ipv6 = 1
Puis faites-le effet
$ je ne sais pas si c'est le cas.conf
Ou redémarrez simplement
Cela signifie qu'un autre processus utilise déjà le port. Dans le cas où ce port est utilisé par d'autres applications critiques et que vous ne souhaitez pas fermer cette application, la meilleure façon est de choisir un autre port libre d'utilisation.
Configurez votre application pour utiliser tout autre port gratuit et vous verrez votre application fonctionner.